home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-01-20 | 177.2 KB | 3,594 lines |
-
- ** Programmer's Technical Reference for MSDOS and the IBM PC **
- USA copyright TXG 392-616 ALL RIGHTS RESERVED
- ──────────────────────────┤ DOSREF (tm) ├───────────────────────────
- ISBN 1-878830-02-3 (disk-based text)
- Copyright (c) 1987, 1994 Dave Williams
- ┌─────────────────────────────┐
- │ Shareware Version, 01/20/94 │
- │ Please Register Your Copy │
- └─────────────────────────────┘
-
- C H A P T E R F I V E
-
- INTERRUPTS 22H THROUGH 0FFH
-
-
- C O N T E N T S
-
- Interrupt 22h Terminate Address .............................. 5**1
- Interrupt 23h Ctrl-Break Exit Address ........................ 5**2
- Interrupt 24h Critical Error Handler ......................... 5**3
- Interrupt 25h Absolute Disk Read ............................. 5**4
- Interrupt 26h Absolute Disk Write ............................ 5**5
- Interrupt 27h Terminate And Stay Resident .................... 5**6
- Interrupt 28h DOS Idle Interrupt ............................. 5**7
- Interrupt 29h Fast Screen Write .............................. 5**8
- Interrupt 2Ah Microsoft Networks - Session Layer Interrupt ... 5**9
- Interrupt 2Bh Unknown ........................................ 5**10
- Interrupt 2Ch Unknown ........................................ 5**11
- Interrupt 2Dh Unknown ........................................ 5**12
- Interrupt 2Eh Alternate EXEC (DOS 2.0+) ...................... 5**13
- Interrupt 2Fh Multiplex Interrupt ............................ 5**14
- Interrupt 30h FAR jump instruction for CP/M-style calls ...... 5**15
- Interrupt 31h Unknown ........................................ 5**16
- Interrupt 32h Unknown ........................................ 5**17
- Interrupt 33h Used by Microsoft Mouse Driver Function Calls .. 5**18
- Interrupt 34h Turbo/Microsoft langs - Floating Point emul. ... 5**19
- Interrupt 35h Turbo/Microsoft langs - Floating Point emul. ... 5**20
- Interrupt 36h Turbo/Microsoft langs - Floating Point emul. ... 5**21
- Interrupt 37h Turbo/Microsoft langs - Floating Point emul. ... 5**22
- Interrupt 38h Turbo/Microsoft langs - Floating Point emul. ... 5**23
- Interrupt 39h Turbo/Microsoft langs - Floating Point emul. ... 5**24
- Interrupt 3Ah Turbo/Microsoft langs - Floating Point emul. ... 5**25
- Interrupt 3Bh Turbo/Microsoft langs - Floating Point emul. ... 5**26
- Interrupt 3Ch Turbo/Microsoft langs - Floating Point emul. ... 5**27
- Interrupt 3Dh Turbo/Microsoft langs - Floating Point emul. ... 5**28
- Interrupt 3Eh Turbo/Microsoft langs - Floating Point emul. ... 5**29
- Interrupt 3Fh Overlay Manager Interrupt (Microsoft LINK.EXE) . 5**30
- Interrupt 40h Hard Disk BIOS ................................. 5**31
- Interrupt 41h Hard Disk Parameters ........................... 5**32
- Interrupt 42h Pointer to screen BIOS entry ................... 5**33
- Interrupt 43h Pointer to EGA Graphics Character Table ........ 5**34
- Interrupt 44h Pointer to graphics character table ............ 5**35
- Interrupt 45h Reserved by IBM (not initialized) ............. 5**36
- Interrupt 46h Pointer to second hard disk parameter block .... 5**37
- Interrupt 47h Reserved by IBM (not initialized) ............. 5**38
- Interrupt 48h Cordless Keyboard Translation .................. 5**39
- Interrupt 49h Non-kbd Scan Code Translation Table Addr (PCjr) 5**40
- Interrupt 4Ah Real-Time Clock Alarm (Convertible, PS/2) ...... 5**41
- Interrupt 4Bh Reserved by IBM (not initialized) ............. 5**42
- Interrupt 4Ch Reserved by IBM (not initialized) ............. 5**43
- Interrupt 4Dh Reserved by IBM (not initialized) ............. 5**44
- Interrupt 4Eh Reserved by IBM (not initialized) ............. 5**45
- Interrupt 4Fh Reserved by IBM (not initialized) ............. 5**46
- Interrupt 50-57 IRQ0-IRQ7 Relocation ........................... 5**47
- Interrupt 58h Reserved by IBM (not initialized) ............. 5**48
- Interrupt 59h Reserved by IBM (not initialized) ............. 5**49
- Interrupt 5Ah Reserved by IBM (not initialized) ............ 5**50
- Interrupt 5Bh Reserved by IBM (not initialized) ............. 5**51
- Interrupt 5Ah Cluster Adapter BIOS entry address ............. 5**52
- Interrupt 5Bh Reserved by IBM (not initialized) ............. 5**53
- Interrupt 5Ch NETBIOS interface entry port, TOPS ............. 5**54
- Interrupt 5Dh Reserved by IBM (not initialized) ............. 5**55
- Interrupt 5Eh Reserved by IBM (not initialized) ............. 5**56
- Interrupt 5Fh Reserved by IBM (not initialized) ............. 5**57
- Interrupt 60h-67h User Program Interrupts ..................... 5**58
- Interrupt 60h Network OS Interface ........................... 5**59
- Interrupt 67h Expanded Memory Board Driver Interrupt ......... 5**60
- Interrupt 68h Not Used (not initialized) .................... 5**61
- Interrupt 69h Not Used (not initialized) .................... 5**62
- Interrupt 6Ah Not Used (not initialized) .................... 5**63
- Interrupt 6Bh Not Used (not initialized) .................... 5**64
- Interrupt 6Ch System Resume Vector (Convertible) ............. 5**65
- Interrupt 6Dh Not Used (not initialized) .................... 5**66
- Interrupt 6Eh Not Used (not initialized) .................... 5**67
- Interrupt 6Fh 10-Net API...................................... 5**68
- Interrupt 70h IRQ 8, Real Time Clock Int (AT, XT/286, PS/2) .. 5**69
- Interrupt 71h IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2) .. 5**70
- Interrupt 72h IRQ 10 (AT, XT/286, PS/2) Reserved ........... 5**71
- Interrupt 73h IRQ 11 (AT, XT/286, PS/2) Reserved ........... 5**72
- Interrupt 74h IRQ 12 Mouse Interrupt (PS/2) ................. 5**73
- Interrupt 75h IRQ 13, Coprocessor Error (AT) ................. 5**74
- Interrupt 76h IRQ 14, Hard Disk Controller (AT, XT/286, PS/2) 5**75
- Interrupt 77h IRQ 15 (AT, XT/286, PS/2) Reserved ............ 5**76
- Interrupt 78h Not Used ....................................... 5**77
- Interrupt 79h Not Used ....................................... 5**78
- Interrupt 7Ah Reserved ....................................... 5**79
- Interrupt 7Bh-7Eh Not Used by IBM ............................. 5**80
- Interrupt 7Ch REXX-PC API .................................... 5**81
- Interrupt 7Fh IBM 8514/A Graphics Adapter API ................ 5**82
- Interrupt 80h-85h Reserved by BASIC ........................... 5**83
- Interrupt 86h Int 18 when relocated by NETBIOS ............... 5**84
- Interrupt 86h-0F0h Used by BASIC when interpreter is running .. 5**85
- Interrupt 0A4h Right Hand Man API ............................. 5**86
- Interrupt 0D4h PC-MOS/386 API ................................. 5**87
- Interrupt 0E0h Digital Research CP/M-86 function calls ........ 5**88
- Interrupt 0E1h PC Cluster Disk Server Information ............. 5**89
- Interrupt 0E2h PC Cluster Program ............................. 5**90
- Interrupt 0E4h Logitech Modula-2 v2.0 Monitor Entry ......... 5**91
- Interrupt 0E5h Not Used ....................................... 5**92
- Interrupt 0E6h Not Used ....................................... 5**93
- Interrupt 0E7h Not Used ....................................... 5**94
- Interrupt 0E8h Not Used ....................................... 5**95
- Interrupt 0E9h Not Used ....................................... 5**96
- Interrupt 0EAh Not Used ....................................... 5**97
- Interrupt 0EBh Not Used ....................................... 5**98
- Interrupt 0ECh Not Used ....................................... 5**99
- Interrupt 0EDh Not Used ....................................... 5**100
- Interrupt 0EEh Not Used ....................................... 5**101
- Interrupt 0EFh GEM interface (Digital Research) ............... 5**102
- Interrupt 0F0h unknown ........................................ 5**103
- Interrupts 0F1h-0FFh (absolute addresses 3C4h-3FFh) ........... 5**104
- Interrupt 0F4h Not Used ............ .......................... 5**105
- Interrupt 0F5h Not Used ............ .......................... 5**106
- Interrupt 0F8h Set Shell Interrupt (OEM) ...................... 5**107
- Interrupt 0F9h Reserved ....................................... 5**108
- Interrupt 0FAh USART ready (RS-232C) .......................... 5**109
- Interrupt 0FBh USART RS ready (keyboard) ...................... 5**110
- Interrupt 0FCh Unknown ........................................ 5**111
- Interrupt 0FDh reserved for user interrupt .................... 5**112
- Interrupt 0FEh reserved by IBM ................................ 5**113
- Interrupt 0FFh reserved by IBM ................................ 5**114
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 22h Terminate Address ............................. 5**1 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0088h)
- This interrupt transfers control to the far (dword) address at this
- interrupt location when an application program terminates. The default
- address for this interrupt is 0:0088h through 0:008Bh. This address is
- copied into the program's Program Segment Prefix at bytes 0Ah through
- 0Dh at the time the segment is created and is restored from the PSP
- when the program terminates. The calling program is normally
- COMMAND.COM or an application. Do not issue this interrupt directly,
- as the EXEC function call does this for you. If an application spawns
- a child process, it must set the Terminate Address prior to issuing
- the EXEC function call, otherwise when the second program terminated
- it would return to the calling program's Terminate Address rather than
- its own. This address may be set with int 21, function 25h.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 23h Ctrl-Break Exit Address ....................... 5**2 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:008Ch)
- If the user enters a Ctrl-Break during STDIN, STDOUT, STDPRN, or
- STDAUX, int 23h is executed. If BREAK is on, int 23h is checked on
- MOST function calls (notably 06h). If the user written Ctrl-Break
- routine saves all registers, it may end with a return-from-interrupt
- instruction (IRET) to continue program execution. If the user-written
- interrupt program returns with a long return, the carry flag is used
- to determine whether the program will be aborted. If the carry flag is
- set, the program is aborted, otherwise execution continues (as with a
- return by IRET). If the user-written Ctrl-Break interrupt uses
- function calls 09h or 0Ah, (Display String or Buffered Keyboard Input)
- then a three-byte string of 03h-0Dh-0Ah (ETX/CR/LF) is sent to STDOUT.
- If execution is continued with an IRET, I/O continues from the start
- of the line. When the interrupt occurs, all registers are set to the
- value they had when the original function call to DOS was made.
-
- There are no restrictions on what the Ctrl-Break handler is allowed
- to do, including DOS function calls, as long as the registers are
- unchanged if an IRET is used.
-
- If the program creates a new segment and loads a second program
- which itself changes the Ctrl-Break address, the termination of the
- second program and return to the first causes the Ctrl-Break address
- to be restored from the PSP to the value it had before execution of
- the second program.
-
- DOS can check for a Ctrl-C at a couple of different places. In at
- least some cases, the value in the AX register on entry to the int 23h
- handler is the same as it was on the original entry to int 21h.
-
- COMMAND.COM makes use of this fact in its int 23h handler. When
- running a batch file, if you press Ctrl-C it prompts you with the
- "Terminate batch job (Y/N)?" question. If you press Ctrl-C in
- response to that question, the int 23h handler notices that it's being
- called recursively (having set an internal flag), and uses the value
- of AX to determine how far it had gotten on the previous pass. If you
- have not responded to the query yet, it asks it again; otherwise it
- just terminates the current program.
-
- This could cause a problem in a program which was catching int 23h
- so that it could release EMS or other resources on exit, then pass it
- on to the original handler. When called a second time, it would
- correctly notice that it had already cleaned up and wouldn't do it
- again, but by the time it got to the original handler, AX would be
- trashed. The result would be the standard "Memory allocation
- error/Cannot load COMMAND, system halted".
-
- Apparently, if you want to catch int 23h but also pass it on to the
- original handler, you should either save and restore registers, or
- restore the original vector on the first trap so you don't get invoked
- again.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 24h Critical Error Handler ........................ 5**3 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0090h)
-
- When an unrecoverable I/O error occurs, control is transferred to an
- error handler in the resident part of COMMAND.COM with an int 24h.
- This may be the standard DOS error handler (Abort, Retry, Ignore,
- Fail?) or a user-written routine.
-
- On entry to the error handler, AH will have its bit 7=0 (high order
- bit) if the error was a disk error (probably the most common error),
- bit 7=1 if not.
-
- BP:SI contains the address of a Device Header Control Block from
- which additional information can be retrieved (see below). The
- register is set up for a retry operation and an error code is in the
- lower half of the DI register with the upper half undefined.
-
- DOS places the following items on the user stack. The stack
- contains the following from top to bottom:
-
- IP │ DOS registers from the issuing int 24h
- CS │
- flags │
- ───────┼───────────────────────────────────────────────────────
- AX │ user registers at time of original int 21h request
- BX │
- CX │
- SI │
- DI │
- BP │
- DS │
- ES │
- ───────┼───────────────────────────────────────────────────────
- IP │ original int 21h from the user to DOS
- CS │
- flags │
-
- To reroute the critical error handler to a user-written critical
- error handler, the following should be done:
-
- Before an int 24h occurs:
- 1) The user application initialization code should save the int 24h
- vector and replace the vector with one pointing to the user error
- routine.
-
- When the int 24h occurs:
- 2) When the user error routine received control it should push the flag
- registers onto the stack and execute a far call to the original int
- 24h vector saved in step 1.
- 3) DOS gives the appropriate prompt, and waits for user input (Abort,
- Retry, Ignore, Fail). After the user input, DOS returns control to
- the user error routine instruction following the far call.
- 4) The user error routine can now do any tasks necessary. To return
- to the original application at the point the error occurred, the
- error routine needs to execute an IRET instruction. Otherwise, the
- user error routine should remove the IP, CS, and flag registers from
- the stack. Control can then be passed to the desired routine.
-
- Int 24h provides the following values in registers on entry to the
- interrupt handler:
-
- entry AH status byte (bits)
- 7 0 disk I/O hard error
- 1 other error - if block device, bad FAT
- - if char device, code in DI
- 6 unused
- 5 0 if IGNORE is not allowed
- 1 if IGNORE is allowed
- 4 0 if RETRY is not allowed
- 1 if RETRY is allowed
- 3 0 if FAIL is not allowed
- 1 if FAIL is allowed
- 2 \ disk area of error 00 = DOS area 01 = FAT
- 1 / 10 = root dir 11 = data area
- 0 0 if read operation
- 1 if write operation
- AL drive number if AH bit 7 = 1, otherwise undefined
- If it is a hard error on disk (AH bit 7=0), register AL
- contains the failing drive number (0=A:, 1=B:, etc.).
- BP:SI address of a Device Header Control Block for which error
- occurred. Block device if high bit of BP:SI+4 = 1
- DI (low byte) error code (note: high byte is undefined)
- error code description
- 00h attempt to write on write-protected diskette
- 01h unknown unit
- 02h drive not ready
- 03h unknown command
- 04h data error (bad CRC)
- 05h bad request structure length
- 06h seek error
- 07h unknown media type
- 08h sector not found
- 09h printer out of paper
- 0Ah write fault
- 0Bh read fault
- 0Ch general failure
- 0Fh invalid disk change (DOS 3.0+)
- 10h FCB unavailable (DOS 3.0+)
- 11h sharing buffer overflow (DOS 3.0+)
-
- note: Only codes 00h through 0Ch are defined in DR-DOS 3.32.
-
- The handler must return this information:
-
- The registers are set such that if an IRET is executed, DOS responds
- according to (AL) as follows:
- AL 00h IGNORE the error
- 01h RETRY the operation
- 02h ABORT via int 22h (jump to terminate address)
- 03h FAIL the system call that is in progress (DOS 3.0+)
- note 1) Be careful when choosing to ignore a response because this
- causes DOS to think that an operation has completed
- successfully when it may not have.
- 2) If the error was a character device, the contents of AL are
- invalid.
- 3) Early PS/2 BIOSes did not perform a retry on disk errors until
- a disk had been read at least once after boot-up.
-
-
- Other Errors
-
- If AH bit 7=1, the error occurred on a character device, or was the
- result of a bad memory image of the FAT. The device header passed in
- BP:SI can be examined to determine which case exists. If the
- attribute byte high-order bit indicates a block device, then the error
- was a bad FAT. Otherwise, the error is on a character device.
-
- If a character device is involved, the contents of AL are
- unpredictable, and the error code is in DI as above.
-
- note 1) Before giving this routine control for disk errors, DOS
- performs several retries. The number of retries varies
- according to the DOS version.
- 2) For disk errors, this exit is taken only for errors occurring
- during an int 21h function call. It is not used for errors
- during an int 25h or 26h.
- 3) This routine is entered in a disabled state.
- 4) All registers must be preserved.
- 5) This interrupt handler should refrain from using DOS function
- calls. If necessary, it may use calls 01h through 12h. Use
- of any other call destroys the DOS stack and leaves DOS in an
- unpredictable state.
- 6) The interrupt handler must not change the contents of the
- device header.
- 7) If the interrupt handler handles errors itself rather than
- returning to DOS, it should restore the application program's
- registers from the stack, remove all but the last three words
- on the stack, then issue an IRET. This will return to the
- program immediately after the int 21h that experienced the
- error. Note that if this is done DOS will be in an unstable
- state until a function call higher than 12h is issued,
- therefore not recommended.
- 8) For DOS 3.x+, IGNORE requests (AL=0) are converted to FAIL for
- critical errors that occur on FAT or DIR sectors.
- 9) For DOS 3.10 up, IGNORE requests (AL=0) are converted to FAIL
- requests for network critical errors (50-79).
- 10) The device header pointed to by BP:SI is as follows:
- dword pointer to next device (0FFFFh if last device)
- word attributes:
- bit 15 1 if character device.
- If bit 15 is 1:
- bit 0 = 1 if current standard input
- bit 1 = 1 if current standard output
- bit 2 = 1 if current NULL device
- bit 3 = 1 if current CLOCK device
- 0 if block device.
- bit 14 is the IOCTL bit
- word pointer to device driver strategy entry point
- word pointer to device driver interrupt entry point
- 8 bytes character device named field for block devices. The
- first byte is the number of units.
- 11) To tell if the error occurred on a block or character device,
- look at bit 15 in the attribute field (WORD at BP:SI+4).
- 12) If the name of the character device is desired, look at the
- eight bytes starting at BP:SI+10.
-
-
- Handling of Invalid Responses (DOS 3.0+)
-
- A) If IGNORE (AL=0) is specified by the user and IGNORE is not
- allowed (bit 5=0), make the response FAIL (AL=3).
- B) If RETRY (AL=1) is specified by the user and RETRY is not
- allowed (bit 4=0), make the response FAIL (AL=3).
- C) If FAIL (AL=3) is specified by the user and FAIL is not
- allowed (bit 3=0), make the response ABORT. (AL=2)
-
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 25h Absolute Disk Read ............................ 5**4 │
- │Interrupt 26h Absolute Disk Write ........................... 5**5 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:0094h, 0:0098h)
-
- These transfer control directly to the disk device driver. On
- return, the original flags are still on the stack (put there by the
- INT instruction). This is necessary because return information is
- passed back in the current flags. All registers except the segment
- registers are destroyed by these calls.
-
- These interrupts should be avoided for software that is intended to
- run on a network, as they may cause troubles in network environments.
-
- PC-MOS/386 provides these services only for compatibility with
- existing DOS-mode apps. 25h/26h are not available for native mode
- 386-mode DOS apps.
-
- The number of sectors specified is transferred between the given
- drive and the transfer address. Logical sector numbers are obtained
- by numbering each sector sequentially starting from track 0, head 0,
- sector 1 (logical sector 0) and continuing along the same head, then
- to the next head until the last sector on the last head of the track
- is counted. Thus, logical sector 1 is track 0, head 0, sector 2;
- logical sector 2 is track 0, head 0, sector 3; and so on. Numbering
- then continues wih sector 1 on head 0 of the next track. Note that
- although the sectors are sequentially numbered (for example, sectors 2
- and 3 on track 0 in the example above), they may not be physically
- adjacent on disk, due to interleaving. Note that the mapping is
- different from that used by DOS 1.10 for double-sided diskettes.
-
- The request is as follows:
-
- int 25h for Absolute Disk Read, | except Compaq DOS 3.31 or DOS 4.0+
- int 26h for Absolute Disk Write | over-32Mb partitions
- entry AL drive number (0=A:, 1=B:, etc)
- CX number of sectors to read (int 25h) or write (int 26h)
- DS:BX segment/offset of disk transfer address buffer (DTA)
- DX first relative sector to read - beginning logical sector
- number
- return CF set if error
- AL error code issued to int 24h in low half of DI
- AH 01h bad command
- 02h bad address mark
- 03h write-protected disk
- 04h requested sector not found
- 08h DMA failure
- 10h data error (bad CRC)
- 20h controller failed
- 40h seek operation failed
- 80h attachment failed to respond
- note 1) DOS returns with a far ret which leave the original flags on
- the stack. Be sure to pop the stack to prevent uncontrolled
- growth.
- 2) MSC 3.0's int86() was a straight interrupt call. MSC 4.0 and
- later make special provision for adjusting the stack on int
- 25h and 26h. This probably won't hurt anything but you should
- be aware of it.
- 3) Ints 25h and 26h will try rereading a disk if they get an
- error the first time.
-
- To address partition sizes greater than 32Mb an extended format is
- provided in Compaq DOS 3.31, DOS 4.0, and DR-DOS. This format passes
- a 32-bit address value by means of a parameter block. The extended
- format may be used to address disks smaller than 32Mb as well as
- larger.
-
- The request is as follows:
-
- int 25h for Absolute Disk Read, | Compaq DOS 3.31 or DOS 4.0+
- int 26h for Absolute Disk Write | over-32Mb partitions
- entry AL drive number (0=A:, 1=B:, etc)
- CX 0FFFFh
- DS:BX address of parameter block. Block format:
- 4 bytes sector number
- 2 bytes number of sectors to read
- 4 bytes FAR pointer to buffer
- return CF set if error
- AL error code issued to int 24h in low half of DI
- AH 01h bad command
- 02h bad address mark
- 03h write-protected disk
- 04h requested sector not found
- 08h DMA failure
- 10h data error (bad CRC)
- 20h controller failed
- 40h seek operation failed
- 80h attachment failed to respond
- note 1) DOS returns with a far ret which leave the original flags on
- the stack. Be sure to pop the stack to prevent uncontrolled
- growth.
- 2) MSC 3.0's int86() was a straight interrupt call. MSC 4.0 and
- later make special provision for adjusting the stack on int
- 25h and 26h. This probably won't hurt anything but you should
- be aware of it.
- 3) Ints 25h and 26h will try rereading a disk if they get an
- error the first time.
- 4) Partition is potentially >32M (and requires this form of the
- call) if bit 1 of device attribute word in device driver is
- set.
- 5) In the IBM OS/2 Tech Ref Volume 1, page 7-33, under "DOS
- Environment Software Interrupt Support", it lists:
- 25h direct read supported
- 26h direct write an error is returned on requests for
- non-removable media
-
- Interrupts 25h and 26h can read logical sectors only. They cannot
- read hidden sectors.
-
- Critical errors are not processed by ints 25h and 26h. Should one
- happen, the interrupt routine will return an error value to the
- program but will not itself call the critical error handler at int
- 24h.
-
- The Microsoft DOS 5.0 Technical Reference refers to this call as
- "superceded" and directs you to int 21h, fn 440Dh, minor code 61h,
- "Read Track on Logical Drive" and minor code 41h, "Write Track on
- Logical Drive." See Chapter 4.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 27h Terminate And Stay Resident ................... 5**6 │
- └─────────────────────────────────────────────────────────────────────┘
- (0:009Ch) (obsolete)
- This vector is used by programs that are to remain resident when
- COMMAND.COM regains control.
-
- After initializing itself, the program must set DX to its last
- address plus one relative to the program's initial DS or ES value (the
- offset at which other programs can be loaded), then execute interrupt
- 27h. DOS then considers the program as an extension of itself, so the
- program is not overlaid when other programs are executed. This is
- useful for loading programs such as utilities and interrupt handlers
- that must remain resident.
-
- entry CS current program segment
- DX last program byte + 1
- return none
- note 1) This interrupt must not be used by .EXE programs that are
- loaded into the high end of memory.
- 2) This interrupt restores the interrupt 22h, 23h, and 24h
- vectors in the same manner as interrupt 20h. Therefore, it
- cannot be used to install permanently resident Ctrl-Break or
- critical error handler routines.
- 3) The maximum size of memory that can be made resident by this
- method is 64K.
- 4) Memory can be more efficiently used if the block containing a
- copy of the environment is deallocated before terminating.
- This can be done by loading ES with the segment contained in
- 2Ch of the PSP, and issuing function call 49h (Free Allocated
- Memory).
- 5) DOS function call 4Ch allows a program to pass a completion
- code to DOS, which can be interpreted with processing (see
- function call 31h).
- 6) If int 27h is called by a program linked with the /HIGH
- switch, it will occupy the top of memory and prevent
- COMMAND.COM from reloading, which is probably not what you
- want.
- 7) Int 21, function 31h is the preferred method to cause a
- program to remain resident because this allows return
- information to be passed and allows a program larger than 64K
- to remain resident.
- 8) It is possible to make an EXE program resident with this call
- by putting a 27h in the second byte of the PSP and terminating
- with a RET FAR.
- 9) Programs terminating with int 27h do not close files on exit.
- Your program must explicitly close any opened files before
- going resident.
- 10) Int 27h does not work correctly when DX contains values from
- 0FFF1h to 0FFFFh. In this case, DOS discards the high bit of
- the contents of DX, resulting in 32k less resident memory than
- was requested by the program.
- 11) This interrupt will work with PC-MOS/386, but there are a
- number of MOS-specific advantages to using int 21h/31h
- instead. See Chapter 4 for further explanation.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 28h (not documented by Microsoft) ................. 5**7 │
- └─────────────────────────────────────────────────────────────────────┘
- * DOS Idle Interrupt
-
- Int 28h has been provided by DOS since release 2.0. The int 28h
- process is similar to the "Timer Tick" process provided by BIOS via
- int 1Ch in that it is an "outbound" (from DOS) call which an
- application can "hook onto" to get service at a particular entry
- point. DOS normally only issues int 28h when it recieves a function
- call (int 21h) from a foreground application with an argument in the
- range of 0 thru 12 (0Ch) in the AH register, or when it is idling
- waiting for keyboard input. In effect, when DOS issues int 28h, it is
- saying to the background task "I'm not doing anything hot right now,
- if you can use the time, go ahead." This means that a foreground
- application which doesn't do many low-number DOS functions can preempt
- CPU time easily.
-
- When int 28h is being issued it is usually safe to do DOS calls.
- You won't get int 28hs if a program is running that doesn't do its
- keyboard input through DOS. You should rely on the timer interrupt
- for these. It is used primarily by the PRINT.COM routines, but any
- number of other routines can be chained to it by saving the original
- vector and calling it with a FAR call (or just JMPing to it) at the
- end of the new routine.
-
- Int 28h is not called at all when any non-trivial foreground task is
- running. As soon as a foreground program has a file open, int 28h no
- longer gets called. Could make a good driver for for a background
- program that works as long as there is nothing else going on in the
- machine.
-
- DOS uses 3 separate internal stacks: one for calls 01h through 0Ch;
- another for calls 0Dh and above; and a third for calls 01h through 0Ch
- when a Critical Error is in progress. When int 28h is called, any
- calls above 0Ch can be executed without destroying the internal stack
- used by DOS at the time.
-
- The byte which is pushed on the stack before an int 28h just
- indicates which stack area is being used by the current int 21h call.
- In DOS 3.1, the code sequence that calls int 28h looks like this:
-
- PUSH SS:[0304]
- INT 28
- POP SS:[0304]
-
- The low-order byte of the word pushed contains 1 if the int 21h call
- currently in progress is for services 1 through 0Ch, and 0 for service
- 0 and for 0Dh and up. Assuming that the last DOS call was not a
- reentrant one, this tells you which set of DOS services should be safe
- to call.
-
- entry no parameters available
- return none
- note 1) The int 28h handler may invoke any int 21h function except
- functions 00h through 0Ch (and 50h/51h under DOS 2.x unless
- DOS CritErr flag is set).
- 2) Apparently int 28h is also called during screen writes.
- 3) Until some program installs its own routine, this interrupt
- vector simply points to an IRET opcode.
- 4) Supported in OS/2 1.0's DOS Compatibility Box.
- 5) It is possible, if you are careful, to enhance the background
- priority by providing more int 28h calls than DOS normally
- would issue.
- 6) If the InDOS flag is zero on int 28h, then it was called by
- someone other than DOS, and the word on the stack should NOT
- be examined.
- 7) From Quarterdeck Tech Support: "Turbo Pascal 4.0 uses int 28h
- as a convenience for its SideKick product users. Interrupt 28
- is the DOS busy flag which DESQview treats as a pause and
- gives up time... foreground gets little time and background
- gets a lot...reverse of normal."
- 8) This interrupt is supported by PC-MOS/386 and MS Windows 3.0+.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 29h (not documented by Microsoft) ................. 5**8 │
- └─────────────────────────────────────────────────────────────────────┘
- * Internal - Quick Screen Output
-
- This method is extremely fast (much faster than DOS 21h subfunctions
- 2 and 9, for example), and it is portable, even to "non-compatible"
- MS-DOS computers.
-
- entry AL ASCII value for character to output to screen
- return unknown
- note 1) Documented by Digital Equipment's DOS Reference as provided
- with the DEC Rainbow. Also documented by Digital Research in
- the DR-DOS manual.
- 2) If ANSI.SYS is installed, character output is filtered through
- it.
- 3) Works on the IBM PC and compatibles, Wang PC, HP-150 and
- Vectra, DEC Rainbow, NEC APC, Texas Instruments PC and others.
- 4) This interrupt is called from the DOS's output routines if
- output is going to a device rather than a file, and the device
- driver's attribute word has bit 3 (04h) set to "1".
- 5) This call has been tested with MSDOS 2.11, PCDOS 2.1, PCDOS
- 3.1, PCDOS 3.2, PCDOS 3.3, PCDOS 4.01, and Compaq DOS 3.31.
- 6) Used in IBMBIO.COM as a vector to int 10, function 0Eh (write
- TTY) followed by an IRET.
- 7) Most of the fast ANSI device drivers use this interrupt -
- ZANSI.SYS, NANSI.SYS, and PCMag's ANSI.COM, Quarterdeck's
- DVANSI.SYS.
- 8) When using int 29h to output characters the ASCII 7 (BELL)
- will suppress character output while the bell is sounding.
- 9) When device drivers (or the SYSINIT module which loads the
- drivers) need to do console output, they use int 29h, to call
- the console device driver directly. For example, messages
- telling you about errors in your CONFIG.SYS file are printed
- using this service.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 2Ah Microsoft Networks - Session Layer Interrupt .. 5**9 │
- └─────────────────────────────────────────────────────────────────────┘
- 1) This interrupt was not officially documented by Microsoft
- until the release of Windows 3.0, which has setup
- parameters for int 2Ah.
- 2) LANtastic NetBIOS interface, original IBM PC LAN
- interface.
- 3) NetBIOS alternate interface. The alternate interface
- (2Ah) was originally designed as a "higher" level
- interface to network communications rather than the "low"
- level interface (5Ch) provided by the NETBIOS. The 2Ah
- interface, however, does not support any higher level
- functions than does the 5Ch interface and therefore has
- not become a de facto standard as has the 5Ch interface.
- 4) Most DOS 4.0 external programs (SHARE, etc) check this
- interrupt during installation.
-
- entry AH 00h Check for Int 2Ah Network BIOS Installation
- return AH nonzero if installed
- 01h Execute NETBIOS Request (no error retry)
- ES:BX pointer to NCB
- return AL NETBIOS error code
- AH 00h if no error
- 01h if error
- 02h Set Net Printer Mode
- 03h Get Shared-Device Direct I/O Status
- AL 00h
- DS:SI pointer to ASCIIZ disk device name
- return CF clear if allowed
- set if denied
- note 1) Direct I/O is through ints 13h, 25h, or
- 26h.
- 2) If the device is redirected (see int
- 21h/5F02h) or this call returns with
- carry set, the program should not
- perform direct disk I/O.
- 3) The device pointed to by DS:SI must
- include the colon in the drive:pathname.
- 4) It may take some time for this call to
- return to the calling program. Do not
- use in time-sensitive applications.
- 04h Execute NETBIOS
- AL 00h retry on error
- 01h no retry on error
- ES:BX pointer to network control block
- return AX 0000h for no error
- AH 01h if error
- AL error code (unknown)
- note 1) IBM PC LAN says, "for adapter
- independence, use int 2Ah. No not use
- 5Ch function provided by the network
- adapter."
- 2) Error codes that are automatically
- retried are:
- 09h no session resources available
- 12h session open rejected
- 21h interface busy
- 05h Get Network Resource Information
- AL 00h
- return AX reserved
- BX # of network names (16 - names in
- use)
- CX number of available NCB commands
- DX number of sessions (max - pending)
- 06h Network Print-Stream Control
- (IBM PC LAN)
- AL 01h Set spooled output to
- concatenation mode
- 02h Set spooled output to
- truncation mode
- 03h Trunate printer stream
- return CF clear no error
- set AX DOS error code
- (LANtastic)
- AL 01h Set spooled output to combined
- mode
- return none
- 02h Set spooled output in separate
- mode
- return none
- note Printer output is not combined
- when multiple programs are run or
- when the printer is opened or
- closed. This cmd. implicitly
- starts a new print job.
- 03h Flush printer output
- return none
- note 1) Printer output is flushed and a
- new print job is started. If no
- output exists to be flushed then
- this function has no affect.
- 2) 03h is equivalent to
- Ctrl/Alt/keypad-*
- note NETBIOS 1.10
- 07h-19h unknown
- 20h unknown
- note AL=01h intercepted by DESQview 2.0.
- 23h Receive Broadcast Datagram
- IBM PC LAN 1.2. Manual says "use is not allowed".
- 80h Begin DOS Critical Section
- AL critical section number (1 to 6)
- note SHARE.EXE uses critical section number 01h.
- 81h End DOS Critical Section
- AL critical section number (1 to 6)
- note SHARE.EXE uses critical section number 01h.
- 82h Server Hook
- stack AX from call to int 21h
- return stack unchanged
- note Called by the int 21h function dispatcher
- in DOS 3.10+ for function 0 and functions
- greater than 0Ch except 59h.
- 84h Keyboard Busy Loop
- note Same functionality as DOS's int 28h?
- 87h Used by DOS PRINT to mark Critical Regions:
- AL 00h Begin Critical Region
- 01h End Critical Region
- return CF set region already active
- 0A3h Receive Broadcast Datagram
- IBM PC LAN 1.2. Manual says "use is not allowed".
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 2Bh (not documented by Microsoft) ................. 5**10│
- └─────────────────────────────────────────────────────────────────────┘
- * Unknown - Internal Routine for DOS (IRET)
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 2Ch (not documented by Microsoft) ................. 5**11│
- └─────────────────────────────────────────────────────────────────────┘
- * Unknown - Internal Routine for DOS (IRET)
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 2Dh (not documented by Microsoft) ................. 5**12│
- └─────────────────────────────────────────────────────────────────────┘
- * Unknown - Internal Routine for DOS (IRET)
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 2Eh (undocumented by Microsoft) (DOS 2.0+) ....... 5**13│
- └─────────────────────────────────────────────────────────────────────┘
- * Internal Routine for DOS (Alternate EXEC)
-
- This interrupt passes a command line addressed by DS:SI to
- COMMAND.COM. The command line must be formatted just like the
- unformatted parameter area of a Program Segment Prefix. That is, the
- first byte must be a count of characters, and the second and
- subsequent bytes must be a command line with parameters, terminated by
- a carriage return character.
-
- When executed, int 2Eh will reload the transient part of the command
- interpreter if it is not currently in memory. If called from a
- program that was called from a batch file, it will abort the batch
- file. If executed from a program which has been spawned by the EXEC
- function, it will abort the whole chain and probably lock up the
- computer. Int 2Eh also destroys all registers including the stack
- pointer.
-
- Int 2Eh is called from the transient portion of the program to reset
- the DOS PSP pointers using the above Functions #81 & #80, and then
- reenters the resident program.
-
- When called with a valid command line, the command will be carried
- out by COMMAND.COM just as though you had typed it in at the DOS
- prompt. Note that the count does not include the carriage return.
- This is an elegant way to perform a SET from an application program
- against the master environment block for example.
-
- entry DS:SI pointer to an ASCIIZ command line in the form:
- count byte
- ASCII string
- carriage return
- null byte
- note 1) Destroys all registers including stack pointer.
- 2) Seems to work OK in both DOS 2.x and 3.x.
- 3) It is reportedly not used by DOS.
- 4) As far as known, int 2Eh is not used by DOS 3.1, although it
- was called by COMMAND.COM of PCDOS 3.0, so it appears to be in
- 3.1 only for the sake of compatibility.
- 5) Not used by the aftermarket 4DOS command interpreter prior to
- version 3.0. 3.0 merely hooks this vector and does nothing
- with it. 3.02 and later provide a TSR to add 2Eh capability.
- 6) Trapped by PC-MOS/386 to prevent illegal entry into the
- command processor.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 2Fh Multiplex Interrupt ........................... 5**14│
- └─────────────────────────────────────────────────────────────────────┘
-
- Interrupt 2Fh is the multiplex interrupt. A general interface is
- defined between two processes. It is up to the specific application
- using interrupt 2Fh to define specific functions and parameters.
-
- This interrupt is becoming more commonly used as the available
- interrupt 21 functions are getting to be in short supply. Int 2Fh
- doesn't require any support from DOS itself for it to be used in
- application programs. It's not handled by DOS, but by the programs
- themselves.
-
- Every multiplex interrupt handler is assigned a specific multiplex
- number. The multiplex number is specified in the AH register; the AH
- value tells which program your request is directed toward. The
- specific function that the handler is to perform is placed in the AL
- register. Other parameters are places in the other registers as
- needed. The handlers are chained into the 2Fh interrupt vector and
- the multiplex number is checked to see if any other application is
- using the same multiplex number. There is no predefined method for
- assigning a multiplex number to a handler. You must just pick one.
- To avoid a conflict if two applications choose the same multiplex
- number, the multiplex numbers used by an application should be
- patchable. In order to check for a previous installation of the
- current application, you can search memory for a unique string
- included in your program. If the value you wanted in AH is taken but
- you don't find the string, then another application has grabbed that
- location.
-
- Int 2Fh was not documented under DOS 2.x. There is no reason not to
- use int 2Fh as the multiplex interrupt in DOS 2.x. The only problem
- is that DOS 2.x does not initialize the int 2Fh vector, so when you
- try to chain to it like you are supposed to, it will crash. If your
- program checks the vector for being zero and initializes it itself or
- doesn't chain in that case, it will work for you n 2.x just the same
- as 3.x.
-
- DOS 3.2 itself contains some int 2Fh handlers - it uses values of
- 08h, 13h, and 0F8h. There may be more. NLSFUNC from DOS 3.3 up uses
- part of int 2Fh and so does GRAFTABL.
-
- For int 2Fh calls, register AH identifies which program is to handle
- the interrupt. AH values 00h-7Fh are reserved for DOS, not that
- anyone cares much. Values 0C0h-0FFh are reserved for applications.
- Register AL contains the subfunction code if used.
-
- IBM has reported that PC-DOS 4.0 will sometimes hang when
- substituting int 2Fh for int 67h for network calls. Most of DOS 4.0's
- external commands check the 2Fh PRINT and other statuses while
- operating for enhanced network support. DOS 4.0 SHARE.EXE traps the
- 2Fh interrupt. IBM and Microsoft DOS programming information for
- versions prior to 4.0 strongly imply that 2Fh functions not used by
- PRINT.COM are open for general use. DOS 4.0 uses quite a few 2Fh
- functions and this may be a cause of incompatibility with some
- software.
-
- LANtastic NOS SERVER.EXE v2.49s and earlier will not run under DOS
- 4.x due to int 2Fh conflicts. This conflict also occurs under DR-DOS
- versions 3.40 and 3.41. DR-DOS is internally similar to DOS 4.0.
-
-
- Function 01h PRINT.COM
- PC-DOS 3.3's PRINT.COM hooks the following interrupt vectors:
- 05h PrintScreen Interrupt
- 13h BIOS Disk Interrupt
- 14h BIOS Serial Communications Interrupt
- 15h BIOS "System Services" Interrupt
- 17h BIOS Printer Interrupt
- 19h Bootstrap Loader Interrupt
- 1Ch Timer Tick
- 23h Control-C Terminate Address
- 24h Critical Error Handler Address
- 28h DOS Idle Interrupt (undocumented)
- 2Fh Multiplex Interrupt
-
- entry AH 01h
- AL 00h PRINT Get Installed State
- This call must be defined by all int 2Fh
- handlers. It is used by the caller of the
- handler to determine if the handler is present.
- On entry, AL=0. On return, AL contains the
- installed state as follows:
- return AL 0FFh installed
- 01h not installed, not OK to install
- 00h not installed, OK to install
-
- 01h PRINT Submit File
- DS:DX pointer to submit packet
- format byte level
- dword pointer to ASCIIZ filename
- return CF set if error
- AX error code
- note 1) A submit packet contains the level (BYTE) and a
- pointer to the ASCIIZ string (DWORD in
- offset:segment form). The ASCIIZ string must
- contain the drive, path, and filename of the
- file you want to print. The filename cannot
- contain global filename characters.
- return CF set if error
- AX error code
-
- 02h PRINT Cancel File
- On entry, AL=2 and DS:DX points to the ASCIIZ
- string for the print file you want to cancel.
- Global filename characters are allowed in the
- filename.
- DS:DX pointer to ASCIIZ file name to cancel (wildcards
- OK)
- return CF set if error
- AX error code
-
- 03h PRINT Remove All Files
- return CF set if error
- AX error code
-
- 04h PRINT Hold Queue/Get Status
- This call holds the jobs in the print queue so
- that you can scan the queue. Issuing any other
- code releases the jobs. On entry, AL=4. On
- return, DX contains the error count. DS:SI
- points to the print queue. The print queue
- consists of a series of filename entries. Each
- entry is 64 bytes long. The first entry in the
- queue is the file currently being printed. The
- end of the queue is marked by the entry having a
- null as the first character.
- return DX error count
- DS:SI pointer to print queue (null-string
- terminated list of 64-byte ASCIIZ
- filenames)
- CF set if error
- AX error code
- 01h function invalid
- 02h file not found
- 03h path not found
- 04h too many open files
- 05h access denied
- 08h queue full
- 09h spooler busy
- 0Ch name too long
- 0Fh drive invalid
-
- 05h PRINT release print jobs
- return none
- note 1) This call has no parameters.
- 2) Restarts the print queue. This call must be
- called to restart the current print job or after
- calling function 04h to pause the print job.
-
- 06h PRINT get printer device (DOS 3.3+)
- return CF clear OK
- AX 0000h
- CF set
- AX 0008h (ERROR_QUEUE_FULL)
- DS:SI pointer to printer device header
- struc.
- note 1) This call has no parameters.
- 2)
-
-
- Function 02h PC LAN Program
- entry AH 02h
- other parameters unknown
-
-
- Function 05h DOS 3.0+ Critical Error Handler
- entry AH 05h
- AL 00h Installation Check
- return AL 00h not installed, OK to install
- 01h not installed, not OK to install
- 0FFh installed
- note This set of functions allows a user program to
- partially or completely override the default
- critical error handler in COMMAND.COM.
- AL xxh Handle Error - nonzero error code in AL
- (xxh indicates nonzero extended error code)
- return CF clear
- ES:DI pointer to ASCIIZ error message
- AL (?)
- CF set use default error handler
- for LANtastic LANOS:
- entry AH 05h
- AL 00h for installation check
- # for error code (in pre DOS 4.00)
- 1 or 2 for error code in DOS 4.00
- BX in Error code
- return CF clear if error code converted to text
- set if error code can't be converted
- ES:DI pointer to ASCIIZ text buffer containing error text.
- This is a read-only text buffer and you must not alter
- the text in this buffer.
-
-
- Function 06h ASSIGN
- entry AH 06h
- AL 00h Installation Check
- 01h Get Memory Segment
- return (AH=00h) AL (to 4.01) nonzero if ASSIGN is installed
- (5.0) 0FFh if ASSIGN is installed
- (AH=01h) ES segment of ASSIGN work area
- note 1) Many references report the return value in AH, but this call
- appears to return its information in AL.
- 2) Microsoft Press' "Advanced MSDOS Programming" (Second Edition)
- documents int 2Fh, AX=2000 to check for ASSIGN, but according
- to Ray Duncan (the author) this is a typo.
-
-
- Function 08h DRIVER.SYS
- entry AH 08h
- AL 00h Installation Check
- return AL 00h not installed, OK to install
- 01h not installed, not OK to install
- 0FFh installed
- 01h Add New Block Device
- DS:DI pointer to device driver header
- note Moves down list of drivers, copying and
- modifying word at offset 29h. Device driver
- appended to driver chain.
- 02h Execute Device Driver Request
- ES:BX pointer to device driver request header
- return Request header updated as per requested
- operation.
-
-
- Function 10h SHARE (DOS 3.0+)
- entry AH 10h
- AL 00h Installation Check
- return AL 00h not installed, OK to install
- 01h not installed, not OK to install
- 0FFh installed
- note 1) Values of AL other than 00h appear to put DOS 3.3 SHARE into
- an infinite loop.
- 2) PC-MOS/386 will always report SHARE.EXE as being present, as
- its functions are duplicated within the PC-MOS/386 kernel.
- 3) If DOS 4.0's SHARE is loaded manually, either in the CONFIG or
- AUTOEXEC file, it can't access the NUL device if 4DOS 3.x is
- installed. If SHARE.EXE is in the root, the problem doesn't
- usually occur. It's been reported that 4DOS is not the only
- program that has problems with SHARE.EXE and the NUL device,
- so it's more likely to be an MS-DOS problem than a 4DOS
- problem. (dgh on BIX)
- 4) MS Windows intercepts this call and always returns nonzero
- regardless of SHARE's presence. If your program uses file
- sharing you should try locking and reading a file and watch
- for the error codes returned by int 21h/5Ch. (Lock/Unlock
- File)
- 5) SHARE function is built into DR-DOS 3.4x, but was removed to a
- separate TSR module in 5.0 and 6.0.
-
-
- Function 11h Multiplex - Network Redirection
- note In DOS 4.0+, the 11xx calls are all in IFSFUNC.EXE, not in the
- PC LAN Program redirector.
-
- entry AH 11h
- AL 00h Installation Check
- return AL 00h not installed, OK to
- install
- 01h not installed, not OK to
- install
- 0FFh installed
- 06h Close Remote File
- 08h Read From Remote File
- 09h Write to Remote File
- 0Ah Lock Region of File
- BX file handle
- CX:DX starting offset
- SI high word of size
- stack word low word of size
- return CF set on error
- AL DOS error code
- stack unchanged
- 0Bh Unlock a File Region
- BX file handle
- CX:DX starting offset
- SI high word of size
- stack word low word of size
- return CF set on error
- AL DOS error code
- stack unchanged
- 0Ch Get Disk Space
- return AL sectors per cluster
- BX total clusters
- CX bytes per sector
- DX number of available clusters
- 0Dh unknown
- 0Eh Set Remote File's Attributes
- 0Fh Get Remote File's Attributes
- 10h unknown
- 11h Rename Remote File
- 12h unknown
- 13h Delete Remote File?
- 14h unknown
- 15h unknown
- 16h Open Existing Remote File?
- 17h unknown
- 18h unknown
- 19h CHDIR?
- 1Ah unknown
- 1Bh Find First?
- 1Ch Find Next?
- 1Dh Close All Remote Files for Process?
- 1Eh Do Redirection
- stack word function to execute
- 5F02h get redirection list entry
- BX redirection list index
- DS:SI pointer to 16-byte local
- device name buffer
- ES:DI pointer to 128-byte
- network name buffer
- 5F03h redirect device
- BL device type (see
- 21h/5F03h)
- CX stored parameter value
- DS:SI pointer to ASCIIZ source
- device name
- ES:DI pointer to destination
- ASCIIZ network path +
- ASCIIZ password
- 5F04h cancel redirection
- DS:SI pointer to ASCIIZ device
- name or network path
- return CF set on error
- 1Fh Printer Setup
- stack word function
- 5E02h set printer setup
- 5E03h get printer setup
- return CF set on error
- 20h Reset Disks and Flush Buffers?
- 21h Seek on Remote File?
- return CF set on error
- clear if successful
- DX:AX new file position?
- 22h Process Termination Hook?
- 23h-26h unknown
-
-
- Function 12h Multiplex, DOS 3.0+ Internal Services
-
-
- Function 13h DOS 3.3+(?) Monitor Int 19h
- entry AH 13h
- DS:DX pointer to the int13h vector to be restored when doing
- an int19h call
- ES:BX pointer to the int13h vector to be used when DOS
- passes the int13h call along
- return DS:DX the original int13h vector used by int19h
- ES:BX the original int13h vector to which DOS passed the
- calls along
- note Usually, the original vectors will be the same thing, either
- F000:EC59 for floppy disk systems, or maybe F000:A343 for hard
- disk systems, but these guys could vary, especially if you're
- using a non-standard controller.
-
-
- Function 14h NLSFUNC.COM
- entry AH 14h
- AL 00h installation check
- return AL 00h not installed, OK to install
- 01h not installed, not OK to install
- 0FFh installed
- 01h unknown
- note Calls int 2Fh/1227h under certain circumstances.
- 02h unknown
- note Calls int 2Fh/1227h under certain circumstances.
- 03h unknown
- note In DOS 3.3, appears to be identical to
- subfunction 01h.
- other parameters unknown
-
-
- Function 15h CD-ROM extensions
- Microsoft CD-ROM driver versions 1.0 through 2.0 will
- work only up to DOS 3.31. DOS 4.0 and up require 2.1
- drivers. MSCDEX abandons INT 13; and redirection
- within DOS to do its work. Some LAN software, such as
- LANtastic, uses the same mechanism to implement
- network drives. MSCDEX provides IFS functionality in
- any version of DOS back to 3.0.
-
- entry AH 15h CD-ROM services
- AL subfunctions
- 00h Get Number of CD-ROM Drives (Installation Check)
- BX 00h
- return BX number of CD-ROM drive letters used
- 0000h MSCDEX not installed
- CX starting drive letter (0=A:, 1=B:, etc)
- note This installation check does not follow the
- format used by other software.
-
- 01h Get Drive Device List
- ES:BX pointer to buffer to hold drive letter list
- (5 bytes per drive letter)
- return buffer filled, for each drive letter:
- byte subunit number in driver
- dword address of device driver header
-
- 02h Get Copyright File Name
- CX drive number (0=A:)
- ES:BX pointer to 38-byte buffer for name of copyright
- file
- return CF set if drive is not a CD-ROM drive
- AX error code (15h)
-
- 03h Get Abstract File Name
- ES:BX pointer to 38-byte buffer for name of abstract
- file
- CX drive number (0=A:)
- return CF set if drive is not a CD-ROM drive
- AX error code (15h)
-
- 04h Get Bibliographic Doc File Name
- CX drive number (0=A:)
- ES:BX pointer to 38-byte buffer for name of
- bibliographic documentation file
- return CF set if drive is not a CD-ROM drive
- AX error code (15h)
-
- 05h Read VTOC (Volume Table of Contents)
- CX drive number (0=A:)
- DX sector index (0=first volume descriptor,
- 1=second,...)
- ES:BX pointer to 2048-byte buffer
- return CF set on error
- AX error code (15h, 21h)
- CF clear if successful
- AX volume descriptor type
- 00h other
- 01h standard
- 0FFh terminator
-
- 06h Turn Debugging On
- BX debugging function to enable
- note Reserved for development.
-
- 07h Turn Debugging Off
- BX debugging function to disable
- note Reserved for development.
-
- 08h Absolute Disk Read
- CX drive number (0=A:)
- DX number of sectors to read
- ES:BX pointer to buffer
- SI:DI starting sector number
- return CF set on error
- AL error code (15h, 21h)
-
- 09h Absolute Disk Write
- CX drive number (0=A:)
- DX number of sectors to write
- ES:BX pointer to buffer
- SI:DI starting sector number
- note Corresponds to int 26h and is currently reserved
- and nonfunctional.
-
- 0Ah Reserved by Microsoft
-
- 0Bh CD-ROM 2.00 - Drive Check
- CX drive number (0=A:)
- return BX 0ADADh if MSCDEX.EXE installed
- AX 0000h if drive not supported
- <>0 if supported
-
- 0Ch CD-ROM 2.00 - Get MSCDEX.EXE Version
- return BH major version
- BL minor version
- note MSCDEX.EXE versions prior to 1.02 return BX=0.
-
- 0Dh CD-ROM 2.00 - Get CD-ROM Drive Letters
- ES:BX pointer to buffer for drive letter list
- (1 byte per drive)
- return Buffer filled with drive numbers (0=A:). Each
- byte corresponds to the drive in the same
- position for function 1501h.
-
- 0Eh CDROM 2.00 - Get/Set Volume Descriptor
- Preference
- BX subfunction
- 00h Get Preference
- DX 0000h
- return DX preference settings
- 01h Set Preference
- DH volume descriptor preference
- 01h primary volume descriptor
- 02h supplementary volume descriptor
- DL Supplementary Volume Descriptor
- Preference
- 01h shift-Kanji
- CX drive number (0=A:)
- return CF set on error
- AX error code (01h, 15h)
-
- 0Fh CD-ROM 2.00 - Get Directory Entry
- CX drive number (0=A:)
- ES:BX pointer to ASCIIZ pathname
- SI:DI pointer to 255-byte buffer for directory entry
- return CF set on error
- AX error code
- CF clear if succesful
- AX disk format (0=High Sierra,
- 1=ISO 9660)
- note Directory entry format:
- byte length of directory entry
- byte length of XAR in LBN's
- dword LBN of data, Intel (little-Endian) format
- dword LBN of data, Motorola (big-Endian) format
- dword length of file, Intel format
- dword length of file, Motorola format
- ---High Sierra---
- 6 bytes date and time
- byte bit flags
- byte reserved
- ---ISO 9660---
- 7 bytes data and time
- byte bit flags
- ---both formats---
- byte interleave size
- byte interleave skip factor
- word volume set sequence number, Intel format
- word volume set sequence number, Motorola
- format
- byte length of file name
- n bytes file name
- byte (optional) padding if filename is odd
- length
- n bytes system data
-
- Error codes:
- 01h invalid function
- 15h invalid drive
- 21h not ready
-
-
- Function 16h MS-DOS Idle Call (DOS 5.0+, OS/2 2.0, Windows 3.0+)
- entry AH 16h idle call
- AL 80h
- return AL 00h idle call is supported
- nonzero idle call is not supported
- note 1) When your program is waiting for user input or otherwise not
- doing useful work, you can call this function in a loop.
- Properly written background programs can monitor this call to
- determine if it is safe to do processing. This call
- originated in Windows 3.0, then the OS/2 2.0 DOS box, and
- finally in DOS 5, where DOSSHELL uses it so processes can tell
- the shell when it is safe to swap tasks. It's also used by
- the Microsoft Laptop Power Management API.
- 2) The MS 5.0 Technical Reference recommends making sure the int
- 2Fh vector is nonzero before calling this function. This
- would be to ensure you are running a DOS version that has 2Fh
- support.
- 3) This call is nonblocking, that is, the system does not suspend
- the program unless another program is ready to run. Usually
- the call returns immediately and the program continues
- running.
- 4) Windows apps should NOT issue this interrupt.
-
-
- Function 17h MS Windows Clipboard API (3.0+)
- no registers known
- note This is the interface to the Clipboard. You can open the
- Clipboard, determine the size of the data in the Clipboard,
- read the Clipboard, write the Clipboard, clear the Clipboard,
- and close the Clipboard.
-
-
- Function 19h SHELLB.COM (DOS 4.0+)
- entry AH 00h SHELLB.COM - Installation Check
- return AL 00h not installed
- 0FFh installed
- 01h SHELLC.EXE Interface
- BL 00h if SHELLC transient
- 01h if SHELLC resident
- DS:DX pointer to far call entry point for
- resident SHELLC.EXE
- return ES:DI ptr to SHELLC.EXE workspace within
- SHELLB.COM
- note SHELLB.COM and SHELLC.EXE are parts of the DOS
- 4.x shell
- 02h SHELLB.COM - COMMAND.COM Interface
- ES:DI pointer to ASCIIZ full filename of
- current batch file, with at least the
- final filename element uppercased
- DS:DX pointer to buffer for results
- return AL 00h failed, either
- (a) final filename element
- quoted at ES:DI does not
- match identity of shell
- batch file quoted as parm of
- most recent call of SHELLB
- command,
- or
- (b) no more Program Start
- Commands
- available.
- 0FFh success, then:
- memory at DS:[DX+1] onwards
- filled as:
- DX+1: byte count of bytes of
- PSC
- DX+2: n bytes Program Start
- Command text
- byte 0Dh terminator
- note COMMAND.COM executes the result of this call
- in preference to reading a command from a
- batch file. Thus the batch file does not
- advance in execution for so long as SHELLB
- provides PSCs from its workspace. The PSCs are
- planted in SHELLB workspace by SHELLC, the
- user menu interface. The final PSC of a
- sequence is finished with a GOTO COMMON, which
- causes a loop back in the batch file which
- called SHELLC so as to execute SHELLC again.
- The check on batch file name permits PSCs to
- CALL nested batch files while PSCs are still
- stacked up for subsequent execution.
- 03h SHELLB.COM - COMMAND.COM Interface
- ES:DI pointer to ASCIIZ batch file name as
- for fn 02h
- return AL 00h quoted batch files does not
- match last SHELLB parameter
- 0FFh quoted batch file name matches
- last SHELLB parameter
- 04h SHELLB.COM - SHELLB.COM transient to TSR
- interface
- return ES:DI pointer to name of current shell batch
- file:
- word number of bytes of name
- following
- bytes (8 max) uppercase name of
- shell batch file
-
-
- Function 1Ah ANSI.SYS (DOS 4.0+)
- entry AH 00h Installation Check
- return AL 00h not installed
- 0FFh if installed
- 01h Get/Set Display Information
- CL 5Fh set information
- 7Fh get information
- DS:DX pointer to parameter block as
- for int 21h, AX=440Ch, CX=037Fh/
- 035Fh respectively
- return CF set on error
- AX error code (unknown)
- clear if successful
- note 1) AX is destroyed.
- 2) May be the DOS IOCTL interface to ANSI.SYS.
-
-
- Function 1Bh XMA2EMS.SYS (DOS 4.0+)
- entry AH 00h Installation Check
- return AL 0FFh if installed
- 01h Get Hidden Frame Information
- DI hidden physical page number
- return AX 0000h if successful
- ES segment of page frame
- DI physical page number
- 0FFFFh if failed (no such hidden page)
- note 1) XMA2EMS.SYS extension is only installed if DOS has page frames
- to hide. This extension hooks onto int 67h fn 58h and returns
- from that call data which excludes the physical pages being
- used by DOS.
- 2) Function 02h corresponds to the data edited out of the int
- 67h/fn 58h call.
-
-
- Function 43h Microsoft Extended Memory Specification (XMS)
- The XMS version 2.00 for MS-DOS allows DOS programs
- to utilize additional memory found in 80286 and 80386
- machines. With some restrictions, XMS adds about 64K
- to the 640K which DOS programs can access directly.
- XMS also provides DOS programs with a standard method
- for storing data in extended memory.
- See Chapter 10 for API.
-
-
- Function 48h DOSKEY.COM (DOS 5.0+)
- entry AH 48h DOSKEY.COM
- AL 00h Get Installed State
- return AL 00h not installed
- 0FFh installed
-
- AL 10h Read Command Line
- DS:DX pointer to buffer to take the command line
- buffer:
- offset description
- 00h buffer size (max 128 bytes)
- 01h the number of characters, minus 1. The
- final CR is copied to the buffer but
- not included in the byte count.
- 02h the first byte of the input line.
- return AX 0000h
- DS:DX filled with command line
- note AX=0 if the user types a macro name, and the buffer is not
- filled. Your program must call the function a second time to
- expand the macro and copy the macro text to the buffer.
-
-
- Function 4Ah DOS 5.0 HMA Services (undocumented)
- entry AH 4Ah
- AL 01h Get Size
- return BX number of bytes (possibly 0) of available HMA
- ES:DI start of the available HMA
-
-
- Function 4Bh Microsoft Task Switcher API (DOS 5.0+)
- entry AH 4Bh
-
- entry AL 01h Build_Callout_Chain
- ES:BX 0:0
- CX:DX switcher call-in address
- return ES:BX address of the app's Switch_Call_Back_Info data
- structure
- note All other registers must be preserved.
-
- entry AL 02h Detect Switcher
-
- entry AL 03h Allocate Switcher ID
-
- entry AL 04h Free Switcher ID
-
- entry AL 05h Identify Instance Data
-
-
-
-
- Function 64h SCRNSAV2
- entry AH 64h
- AL 00h installation check
- return AL 00h not installed
- 0FFh installed
- note SCRNSAV2.COM is a screen blanker for PS/2s with VGA by Alan
- Ballard.
-
-
- Function 7Ah Novell NetWare
- entry AH 7Ah
- AL 00h installation check
- return AL 00h not installed
- 0FFh installed
- ES:DI pointer to FAR entry point for routines otherwise
- accessed through int 21h
- note 1) Returns address of entry point for IPX and SPX.
- 2) Parameters are listed in Chapter 13.
-
-
-
- Function 87h APPEND
- entry AH 87h
- AL 00h APPEND installation check
- return AH <> 0 if installed
- 01h APPEND - unknown
- 02h APPEND - version check
- return unknown
-
-
- Function 88h Microsoft Networks
- entry AH 88h
- AL 00h network program installation check
- return AH <> 0 if installed
- BX installed component flags
- (test in this order!)
- bits 2 messenger
- 3 redirector
- 6 server
- 7 receiver
- other bits not used, do not test
- 01h unknown
- 02h unknown
- 03h get current POST address
- return ES:BX POST address
- 04h set new POST address
- ES:BX new POST address
- 09h network version check
-
-
- Function 89h WHOA! (slows system down for games)
- entry AH 89h
- AL 00h installation check
- return AL 00h not installed
- 0FFh installed
- 01h uninstall
- return AL 0FDh successful
- 0FEh error
- 02h set delay count
- BX = delay count (larger values slow system down more)
- return AL 0FDh successful
- 0FEh error
- note WHOA!.COM is copyright COMPUTE! Publications and Brad Crandall.
-
-
- Function 0AAh VIDCLOCK.COM
- entry AH 0AAh
- AL 00h installation check
- return AL 00h not installed
- 0FFh installed
- note VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III.
-
-
- Function 0ADh KEYB.COM (DOS 3.3+)
- entry AH 0ADh
- AL 80h Get KEYB.COM Version Number
- return
- BX 00h not installed
- nonzero installed
- BH major version number
- BL minor version number
- ---
- AL 81h Set KEYB.COM Active Code Page
- BX code page ID
- 437 USA
- 850 Multilingual (Latin I)
- 852 Multilingual (Latin II)
- 860 Portuguese
- 863 French-Canadian
- 865 Nordic
- return CF clear successful
- set
- AX 0001h if code page is not valid
- ---
- AL 82h Set KEYB.COM Country Flag
- BL 00h domestic (USA) keyboard
- 0FFh not USA keyboard
- return CF clear successful
- set invalid value was passed in BL
- ---
- AL 83h Get KEYB.COM Country Flag
- return BL current country flag value (should be 00h or 0FFh)
-
- note Some of these functions are available in DOS 3.3 and 4.0, but
- were not documented. These descriptions are for DOS 5.0.
-
-
- Function 0AEh DOS Installable Command (DOS 3.3+)
- entry AH 0AEh
- AL 00h installation check
- DX 0FFFFh
- DS:BX pointer to command line
- return AL 00h execute command normally
- 0FFh command is TSR extension to
- COMMAND.COM
- 01h execute installed command
- DX 0FFFFh
- DS:SI pointer to ?
- return DS:SI unknown
- note 1) This apparently provides a mechanism for TSRs to install
- permanent extensions to COMMAND.COM. It seems that
- COMMAND.COM makes this call before executing the current
- command line, and does not execute the command itself if the
- return is 0FFh.
- 2) Fn 01h apparently requests execution of a previous command
- which a call to fn 01h indicated was resident.
- 3) Format of command line:
- offset size description
- 00h byte max length of command line?
- 01h byte count of bytes to follow
- 03h n bytes command line text, terminated by 0Dh
-
-
- Function 0B0h GRAFTABL.COM (DOS 3.3+)
- entry AH 0B0h
- AL 00h installation check
- return AL 00h not installed, OK to install
- 0FFh installed
- note 1) Also used by DISPLAY.SYS.
-
-
- Function 0B7h APPEND.EXE (DOS 3.3+)
- entry AH 0B7h
- AL 00h installation check
- return AH 00h not installed
- nonzero installed (3.3-4.0)
- 0FFh installed (5.0)
-
- 01h unknown
-
- 02h version check
- return AH minor version number, otherwise
- AL major version number
- note The MS 5.0 TR reports AX should be 0FFFFh for
- versions compatible with DOS 5.0. However,
- DOS 4.0 returns the same value.
-
- 03h unknown
-
- 04h get APPEND directory list address (DOS 4.0+)
- return ES:DI pointer to active APPEND path (128
- bytes max) in ASCIIZ format
-
- 05h unknown
-
- 06h get APPEND modes flag (DOS 4.0+)
- return BX APPEND state
- bits 0 set if APPEND enabled
- 1-B reserved, must be zero
- C appends dirs to file requests
- that already specify a drive
- D applies dirs to file requests
- that already specify a PATH.
- Set if /PATH flag active
- E stores the appended dirs in the
- APPEND environment variable.
- Set if /E flag active
- F applies dirs to functions like
- EXEC (21h/4B00h) or FIND FIRST
- (21h/4Eh). Set if /X flag
- active.
- note Returns the current operation modes for APPEND.
-
- 07h set APPEND modes flag (DOS 4.0+)
- BX APPEND state bits (see 06h)
- return none
-
- 08h unknown
- 09h unknown
- 0Ah unknown
- 10h unknown
-
- 11h set TRUENAME flag (DOS 4.0+)
- note 1) This call has no parameters.
- 2) If the next int 21h call is function 3Dh, 43h,
- 4Eh or 6Ch, the fully qualified filename is
- written over top of the filename passed to the
- int 21h call. The application must provide a
- sufficiently large buffer. This state is reset
- after APPEND processes the call.
-
- note 1) (4.0+) The full path name can be retrieved by doing a int 2Fh
- fn 0B711h before an open (int 21h 3Dh or 6Ch). The full path
- is put in your ASCIIZ string when you do the open, so be sure
- it is long enough.
- 2) The APPEND command apparently covers parts of int 21h/6Ch even
- though Microsoft's 4.01 User's Reference says it covers only
- 0Fh, 23h, 2Dh, 11h, 4Eh & 4Bh, some of those do require
- special switches. For 6Ch, it may be a function of the DX
- register. If DX=xx1x it looks only in the current directory,
- if DX=xx0x it will search the full append path. DX is called
- the open flag and gives what action to take if the file exits
- or does not exist.
-
-
- Function 0BFh PC-LAN Network
- entry AH 0BFh
- AL 00h installation check (REDIREFS.EXE)
- return AL 0FFh if installed
- AL 80h set REDIRIFS entry point (REDIR.SYS)
- ES:DI pointer to FAR entry point to IFS handler in
- REDIRIFS
- return AL 0FFh if installed
- ES:DI pointer to internal workspace
- note All future IFS calls to REDIR.SYS are passed to the ES:DI entry
- point.
-
-
- Function 0C7h Artisoft LANtastic AI-LANBIOS
- note This is the default entry point for the LANtastic NOS serial
- and parallel port drivers.
-
-
- Function 0D44Dh 4DOS v3.01,+ Command Interpreter (COMMAND.COM replacement)
- entry AX 0D44Dh 4DOS installation check
- return If 4DOS is present in memory the following values will be
- returned:
- AX 44DDh
- BH minor 4DOS version number
- BL major 4DOS version number (same format as DOS int
- 21h/fn 30h)
- CX 4DOS PSP segment address
- DL 4DOS shell number (0 for the first shell, 1 for the
- second, etc.; incremented each time a new copy of 4DOS
- is loaded over a root copy, either in a different
- multitasker window or via nested shells)
- note 1) (excerpted from 4DOS 3.01 manual) 4DOS now generates two
- different INT 2F calls to allow TSRs to tell when 4DOS is back
- at the prompt. These calls have AX = D44Eh. The first occurs
- immediately before displaying the prompt, with BX = 0; the
- second occurs after displaying the prompt and immediately
- before accepting keyboard input, with BX = 1. Any routine
- intercepting these calls should preserve at least the SI, DI,
- BP, SP, DS, ES, and SS registers.
- 2) This function (440Dh) is only available in swapping mode. It
- tells you if 4DOS is loaded in memory, but not whether it is
- the parent process of your program. You can determine if 4DOS
- is the parent process by comparing the PSP value returned in
- CX to the PSP chain pointer at offset 16h in your program's
- PSP.
-
-
- Function 0E3h AnarKey (keyboard command stack and alias program)
- entry AH 0E3h
- AL 00h installation check
- return AL 00h not installed
- 0FFh installed
- note (excerpted from the AnarKey documentation)
- Upon installation, ANARKEY hooks into two interrupts:
- 1) Interrupt used to install program signature
- -DOS versions before 3.1 use one interrupt between 60h-67h
- -DOS 3.1 and later use interrupt 2Fh
- 2) Interrupt 21h, function 0Ah
- Upon initial program execution, a program "signature" is
- installed which is used by ANARKEY to prevent itself from
- being installed more than once. Depending upon the DOS
- version, a different method of signature installation is
- performed.
- Under DOS 2.x thru 3.0, ANARKEY scans interrupt vectors 60h
- thru 67h searching for an unused vector (signified by a null
- value). If an unused vector is found, ANARKEY takes it and
- installs its program signature there. If all the vectors are
- in use, ANARKEY does not install a program signature.
- Running DOS 3.1 and later, ANARKEY chains into interrupt 2Fh.
- By default, ANARKEY appropriates process number 0E3h.
-
-
- Function 0F7h AUTOPARK.COM (PD TSR hard disk parking utility)
- entry AH 0F7h
- AL 00h installation check
- return AL 00h not installed
- 0FFh installed
- 01h set parking delay
- BX:CX 32 bit count of 55ms timer ticks
- note AUTOPARK is a TSR HD parker by Alan D. Jones.
-
-
- Function Intel Communicating Applications Standard (CAS 1.01A)
- entry AH (default; CAS multiplex number can be user-adjusted)
- AL 00h Get Installed State
- return AL 00h not installed
- 01h not installed, not
- OK to install
- 0FFh installed
- note No errors are returned.
- 01h Submit a Task
- DS:DX ptr to ASCIIZ path and name of Task
- Control File
- return AX positive event handle or neg.
- error code
- note Files associated with a task must stay
- in existence until the task is complete
- or an error will result.
- 02h Abort the Current Event
- return AX event handle of aborted event or
- negative error code
- note Terminating an event is not
- instantaneous. It might take up to 30
- seconds.
- 03h reserved
- 04h reserved
- 05h Find First Entry in Queue
- CX Status of the event you are seeking.
- This value is compared with the field
- at offset 2 of the Control File
- 0 - event has successfully completed
- 1 - event is waiting to be processed
- 2 - number has been dialed
- 3 - connection has been made (sending)
- 4 - connection has been made (receiving)
- 5 - event was aborted
- -1 - chooses an event without regard to
- status This value will probably be
- used most often
- Other negative values match error codes
- in Control File.
- DH direction:
- 0 - Search forward chronologically
- (from the first to the last
- occurring event)
- 1 - Search backward chronologically
- (from the last to the first
- occurring event)
- DL queue to search:
- 0 - Find first control file in Task
- Queue
- 1 - Find first control file in Receive
- Queue
- 2 - Find first control file in Log
- Queue
- return AX 0 if successful, or negative
- error code
- BX event handle for this file
- 06h Find Next Entry in Queue
- DL queue to search:
- 0 - Find next control file in Task
- Queue
- 1 - Find next control file in Receive
- Queue
- 2 - Find next control file in Log Queue
- return AX 0 if successful, or negative
- error code
- BX event handle for this file
- 07h Open a File
- BX event handle
- CX receive file number
- 0 - the Receive Control File
- 1 - first received file
- 2 - second received file
- 3 - third received file
- n - nth received file
- DL queue:
- 0 - open control file in Task Queue
- 1 - open control file in Receive Queue
- or the received data
- file specified in the CX register.
- 2 - Open control file in Log Queue.
- return AX 0 if successful, or negative
- error code
- BX DOS file handle for the requested
- file
- 08h Delete a File
- BX event handle
- CX receive file number
- 0 - delete all files associated with a
- specific Receive Control File
- (including the RCF)
- 1 - delete first received file
- associated with the event handle
- 2 - delete the second received file
- associated with the event handle.
- n - delete the nth received file
- associated with the event handle
- DL queue:
- 0 - delete control file in Task Queue
- 1 - delete a file or files associated
- with an event in the Receive Queue.
- 2 - delete control file in Log Queue
- note It is strongly recommended
- that this function NOT be used to
- delete individual Log Control Files
- to maintain the integrity of the
- log.
- return AX 0 if successful, or negative
- error code
- 09h Delete All Files (in a queue)
- DL queue:
- 0 - delete all control files in the
- Task Queue
- 1 - delete all control files in the
- Receive Queue and all received
- files
- 2 - delete all control files in the Log
- Queue
- return AX 0 if successful or negative
- error code
- 0Ah Get Event Date
- BX event handle of event whose date you
- want to get
- DL queue:
- 0 - task queue
- 1 - receive queue
- 2 - log queue
- return AX 0 if successful or negative
- error code
- CX year (1980-2099)
- DH month (1-12)
- DL day (1-31)
- 0Bh Set Task Date
- BX event handle
- CX year (1980-2099)
- DH month (1-12)
- DL day (1-31)
- return AX 0 if successful or negative
- error code
- 0CH Get Event Time
- BX event handle
- DL queue:
- 0 - task queue
- 1 - receive queue
- 2 - log queue
- return AX 0 if successful or negative
- error code
- CH hour (0-23)
- CL minutes (0-59)
- DH seconds (0-59)
- DL 0
- 0DH Set Task Time
- BX event handle
- CH hour (0-23)
- CL minutes (0-59)
- DH seconds (0-59)
- DL unused
- return AX 0 if successful or negative
- error code
- 0EH Get External Data Block
- DS:DX points to a 256-byte EDB area
- return AX 0 if successful or negative
- error code
- note EDB area is filled with the External
- Data Block
- block format: (values in decimal)
- Offset Length Description
- 0 1 CAS major version number
- 1 1 CAS minor version number
- 2 68 ASCIIZ path to directory
- containing Resident Manager
- and CAS software. The path
- must end with a backslash
- 70 13 ASCIIZ name of current
- phonebook (the CAS
- subdirectory is assumed)
- 83 13 AZCIIZ name of current logo
- file (the CAS subdirectory is
- assumed)
- 96 32 ASCIIZ default sender name
- 128 21 ASCIIZ CSID (CCITT fax device
- ID)
- 149 107 Reserved
- 0Fh Get/Set Autoreceive State
- DL function code:
- 0 - get current autoreceive state
- 1 - set current state to value in DH
- DH # rings before answer or 0 to
- disable
- return AX current state or negative error
- code
- 0 - Autoreceive disabled
- positive # - # rings before hdw
- answers
- 10h Get Current Event Status
- DS:DX pointer to a 444 byte status area
- return AX 0 if successful or negative
- error code
- BX number of the current event (AX=0)
- 11h Get Queue Status
- DL queue:
- 0 - find status of Task Queue
- 1 - find status of Receive Queue
- 2 - find status of Log Queue
- return AX # changes to queue since
- Resident Manager started or
- negative error code If changes
- exceeds 7FFFH, the count begins
- again at 0.
- BX current # of Control Files in
- queue
- CX current # of received files
- 12h Get Hardware Status
- DS:DX pointer to a 128-byte status area
- return AX 0 if successful, negative if not
- DS:DX pointer to filled 128-byte status area
- 13h Run Diagnostics
- DL Mode
- 0 - report progress of diagnostics
- 1 - start running diagnostics
- return if DL=1, AX=0 or a negative error code.
- if DL=0, AX=40h or positive number
- indicating diagnostics passed. A
- negative value indicates failure and
- contains the error code
- 14h Move Received File
- BX event handle
- CX receive file number
- (must be nonzero to specify a received
- file)
- 1 - first received file
- 2 - second received file
- 3 - third received file
- n - nth received file
- DS:DX pointer to new ASCIIZ pathname and
- filename. This file must not exist
- already
- return AX 0 if successful or negative
- error code
- note The path to the new directory must
- exist. This function cannot create
- directories.
- 15h Submit a Single File to Send
- DS:DX pointer to variable-length data area
- return AX positive event handle or
- negative error code
- note 1) variable-length data area format:
- Offset Length Description
- 0 1 Transfer type:
- 0 - 200x200 dpi, facsimile mode
- 1 - 100x200 dpi, facsimile mode
- 2 - file transfer mode
- 3-127 - Reserved.
- 1 1 Text size (if ASCII file, fax
- mode)
- 0 - 80-column
- 1 - 132-column
- 2-127 - reserved
- 2 2 time to send, in DOS file time
- format
- 4 2 date to send, in DOS file time
- format note: Setting both the
- time and date fields to 0
- schedules the file to be sent
- immediately
- 6 32 ASCIIZ Destination Name (To:
- field)
- 38 80 ASCIIZ pathname of the file to
- send
- 118 47 ASCIIZ phone number to call
- 165 64 ASCIIZ application-specific
- tag field
- 229 1 reserved; set to zero
- 230 1 cover page flag:
- 0 - don't send cover page
- 1 - send cover page
- 2-127 - Reserved
- 231 23 reserved; set to zero
- 254 var ASCIIZ cover text (if offset
- 230=1)
- 2) The individual fields have the same
- meaning as in a Task Control File
- 3) You must set all fields, except for the
- Appli-cation-Specific Tag field, before
- calling this function. However, you can
- set the Destination Name and Cover Text
- fields to an empty string
- 16h-80h Reserved by Intel for future expansion
-
-
-
- DOS 2Fh functions 01h (PRINT), 02h (ASSIGN), 10h (SHARE):
- return AX Error
- Codes Description
- 01h invalid function number
- 02h file not found
- 03h path not found
- 04h too many open files
- 05h access denied
- 06h invalid handle
- 08h queue full
- 09h busy
- 0Ch name too long
- 0Fh invalid drive was specified
- CF clear (0) if OK
- set (1) if error - error returned in AX
- note 1) The multiplex numbers AH=0h through AH=7Fh are reserved for
- DOS. Applications should use multiplex numbers 80h through
- 0FFh.
- 2) When in the chain for int 2Fh, if your code calls DOS or if
- you execute with interrupts enabled, your code must be
- reentrant or recursive.
- 3) Important! In versions of DOS prior to 3.0, the int 2Fh
- vector was initialized to zero rather than being pointed into
- the DOS service area. You must initialize this vector
- manually under DOS 2.x.
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │ Miscellaneous Interrupts - in numeric order │
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 30h FAR jump instruction for CP/M-style calls ..... 5**15│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) The CALL 5 entry point does a FAR jump to here (not a vector!)
- 2) PC-Tools PC-Cache 5.1 hooks this vector on XTs but not on ATs.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 31h Unknown ....................................... 5**16│
- └─────────────────────────────────────────────────────────────────────┘
- note PC-Tools PC-Cache 5.1 hooks this vector on ATs but not on XTs.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 32h Unknown ....................................... 5**17│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 33h Used by Microsoft Mouse Driver Function Calls . 5**18│
- └─────────────────────────────────────────────────────────────────────┘
- note See Chapter 14 for mouse programming.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 34h Turbo/Microsoft langs - Floating Point emul. .. 5**19│
- └─────────────────────────────────────────────────────────────────────┘
- note This interrupt emulates opcode 0D8h.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 35h Turbo/Microsoft langs - Floating Point emul. .. 5**20│
- └─────────────────────────────────────────────────────────────────────┘
- note This interrupt emulates opcode 0D9h.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 36h Turbo/Microsoft langs - Floating Point emul. .. 5**21│
- └─────────────────────────────────────────────────────────────────────┘
- note This interrupt emulates opcode 0DAh.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 37h Turbo/Microsoft langs - Floating Point emul. .. 5**22│
- └─────────────────────────────────────────────────────────────────────┘
- note This interrupt emulates opcode 0DBh.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 38h Turbo/Microsoft langs - Floating Point emul. .. 5**23│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) This interrupt emulates opcode 0DCh.
- 2) PC-MOS/386 versions prior to 4.00 use this interrupt to
- interface with the PC-MOS API. Version 4.00 and later use int
- 0D4h for the API. See the Chapter 13 for the PC-MOS API.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 39h Turbo/Microsoft langs - Floating Point emul. .. 5**24│
- └─────────────────────────────────────────────────────────────────────┘
- note This interrupt emulates opcode 0DDh.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 3Ah Turbo/Microsoft langs - Floating Point emul. .. 5**25│
- └─────────────────────────────────────────────────────────────────────┘
- note This interrupt emulates opcode 0DEh.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 3Bh Turbo/Microsoft langs - Floating Point emul. .. 5**26│
- └─────────────────────────────────────────────────────────────────────┘
- note This interrupt emulates opcode 0DFh.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 3Ch Turbo/Microsoft langs - Floating Point emul. .. 5**27│
- └─────────────────────────────────────────────────────────────────────┘
- note This interrupt emulates instructions with an ES segment
- override.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 3Dh Turbo/Microsoft langs - Floating Point emul. .. 5**28│
- └─────────────────────────────────────────────────────────────────────┘
- note This interrupt emulates a standalone FWAIT instruction
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 3Eh Turbo/Microsoft langs - Floating Point emul. .. 5**29│
- └─────────────────────────────────────────────────────────────────────┘
- note Unknown.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 3Fh Overlay Manager Interrupt (Microsoft LINK.EXE) 5**30│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Default overlay manager interrupt; may be changed with LINK
- command line switch. (Microsoft/IBM LINK.EXE)
- 2) The Microsoft Dynamic Link Library manager uses this
- interrupt.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 40h Hard Disk BIOS ................................ 5**31│
- └─────────────────────────────────────────────────────────────────────┘
- Pointer to disk BIOS entry when a hard disk controller
- is installed. The BIOS routines use int 30h to
- revector the diskette handler (original int 13h) here
- so int 40h may be used for hard disk control.
- note 1) Keyboard interrupt for DEC Rainbow.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 41h Hard Disk Parameters .......................... 5**32│
- └─────────────────────────────────────────────────────────────────────┘
- Pointer to first Hard Disk Parameter Block, normally
- located in the controller card's ROM. This table may
- be copied to RAM and changed, and this pointer
- revectored to the new table.
- note 1) XT, AT,XT/2, XT/286, PS/2 except ESDI disks
- 2) format of parameter table is:
- word cylinders
- byte heads
- word starting reduced write current cylinder
- (XT only, 0 for others)
- word starting write pre-comp cylinder
- byte maximum ECC burst length
- byte control byte
- bits 0-2 drive option (XT only, 0 for others)
- 3 set if more than 8 heads
- 4 always 0
- 5 set if manufacturer's defect map on
- max cylinder+1
- 6 disable ECC retries
- 7 disable access retries
- byte standard timeout (XT only, 0 for others)
- byte formatting timeout (XT only, 0 for others)
- byte timeout for checking drive (XT only, 0 for others)
- word landing zone (AT, PS/2)
- byte sectors/track (AT, PS/2)
- byte 0 (zeroes)
- 3) normally vectored to ROM table when system is initialized.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 42h Pointer to screen BIOS entry .................. 5**33│
- └─────────────────────────────────────────────────────────────────────┘
- Used by EGA, VGA, PS/2.
- Relocated (by EGA, etc.) video handler (original int 10h).
- Revectors int 10 (BIOS video) calls to EGA BIOS.
- Also used by Zenith Z-100.
- MCT (Modular Circuit Technology, Taiwan) 4-drive floppy
- controller revectors int 13h to here.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 43h Pointer to EGA Graphics Character Table ....... 5**34│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) The POST initializes this vector pointing to the default table
- located in the EGA ROM BIOS. (PC-2 and up). Not initialized
- if EGA is not present.
- 2) This vector was referred to (mistakenly) as the Video
- Parameters table in the original EGA BIOS listings.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 44h Pointer to graphics character table ........... 5**35│
- └─────────────────────────────────────────────────────────────────────┘
- (0:0110h) This table contains the dot patterns for the first 128
- characters in video modes 4,5, and 6, and all 256
- characters in all additional graphics modes. Not
- initialized if EGA is not present.
- note 1) EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh.
- 2) Novell NetWare - High-Level Language API.
- 3) Also used by Zenith Z-100.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 45h Reserved by IBM (not initialized) ............ 5**36│
- └─────────────────────────────────────────────────────────────────────┘
- note Also used by Zenith Z-100, purpose unknown.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 46h Pointer to second hard disk parameter block ... 5**37│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) AT, XT/286, PS/2.
- 2) (see int 41h) (except ESDI hard disks) (not initialized unless
- specific user software calls for it)
- 3) Also used by Zenith Z-100.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 47h Reserved by IBM (not initialized) ............ 5**38│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 48h Cordless Keyboard Translation ................. 5**39│
- └─────────────────────────────────────────────────────────────────────┘
- (0:0120h)
- This vector points to code to translate the cordless keyboard
- scancodes into normal 83-key values. The translated scancodes are
- then passed to int 9. (not initialized on PC or AT) This is valid on
- the IBM PCjr only. IBM built a number of prototype XT/2 machines with
- infrared keyboards which were later sold through salvage outlets, but
- this was never a production option.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 49h Non-kbd Scan Code Translation Table Addr (PCjr) 5**40│
- └─────────────────────────────────────────────────────────────────────┘
- (0:0124h) PCjr translate table, TI Pro video
-
- 1) This interrupt is used for operation of non-keyboard devices
- on the PCjr, such as the Keytronic Numeric Keypad. This
- interrupt has the address of a table used to translate non-
- keyboard scancodes (greater than 85 excepting 255). This
- interrupt can be revectored by a user application. IBM
- recommends that the default table be stored at the beginning
- of an application that required revectoring this interrupt,
- and that the default table be restored when the application
- terminates. (not initialized on PC or AT)
-
- The PCjr BIOS can interpret scancodes other than those
- generated by the keyboard to allow for expansion. The keyboard
- generates scancodes from 01h to 055h, including 0FFh. Any
- scancodes above 55h (56h through 7Eh for make codes and 0D6h
- through 0FEh for break codes) are processed in the following
- manner:
- 1) if the incoming make code falls within the range of the
- translate table whose address is pointed to by int 49h,
- it is translated into the corresponding scancode. Any
- incoming break codes above 0D5h are ignored.
- 2) if the new translated scancode is less than 56h, it is
- processed by the BIOS as a keyboard scancode and the same
- data is placed in the BIOS keyboard buffer.
- 3) if the translated scancode is higher than 55h or the
- incoming scancode is outside the range of the translate
- table, 40h is added creating a new extended scancode. The
- extended scancode is placed in the BIOS keyboard buffer
- with the character code of 00h (NUL). This utilitizes the
- range of 96h through 0BEh for scancodes 56h through 7Eh.
-
- The default translate-table maps scancodes 56h through
- 6Ah to existing keyboard values. Codes 6Bh theough 0BEh
- are mapped (by adding 40h) to extended codes 0ABh through
- 0FEh since they are outside the range of the default
- translate table.
-
- The format of the translate table is:
-
- 0 length - the number of nonkeyboard scancodes that
- are mapped within the table (from 1 to n).
- 1 to n word high byte 00h (NUL) byte scancode with low
- order byte representing the scancode mapped
- values relative to their input values within the
- range of 56h through 7Eh.
-
- With this layout, all keyboard scancodes can be intercepted
- through int 9h and and nonkeyboard scancodes can be
- intercepted through int 48h.
-
- 2) On the TI Professional, this interrupt is used for some video
- services.
- entry AH 17h Get Display Offset
- return ES:DI segment/offset of current display buffer
- note The TI Pro has only 2048 bytes of character RAM, but it
- is followed by another 2048 bytes of "phantom" RAM
- (i.e. the same 2048 bytes are available at two
- different addresses) so that wraparound checks need not
- be made when writing to the screen. The attribute RAM
- is "shadowed" behind the character RAM through the
- attribute register.
-
- 3) Most of the TI Pro functions are identical to the IBM int 16h
- functions, particularly 0 through 0Eh, although 6 and 7
- (scroll) are quite different and all cursor addressing has the
- rows and columns flipped (i.e. IBM uses DH for row, but TI
- uses DH for column).
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 4Ah Real-Time Clock Alarm (Convertible, PS/2, EISA) 5**41│
- └─────────────────────────────────────────────────────────────────────┘
- 1) Not initialized on PC or AT.
- 2) Invoked by PS/2 and Convertible BIOS when real-time clock alarm
- occurs.
- 3) Used by TI Professional PC for keyboard DSR interface (keyboard
- BIOS interrupt) Functions for AH=0, 1, 2 and 5 are identical to
- IBM's int 16h.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 4Bh Reserved by IBM (not initialized) ............ 5**42│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Used by IBM Micro Channel SCSI hard disk controllers.
- 2) Used by Virtual DMA Services Specification (see Chapter 21 for
- VDS programming information)
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 4Ch Reserved by IBM (not initialized) ............ 5**43│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 4Dh Reserved by IBM (not initialized) ............ 5**44│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 4Eh Reserved by IBM (not initialized) ............ 5**45│
- └─────────────────────────────────────────────────────────────────────┘
- note Used instead of int 13h for disk I/O on TI Professional PC.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 4Fh Reserved by IBM (not initialized) ............ 5**46│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 50-57 IRQ0-IRQ7 Relocation .......................... 5**47│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Normally not initialized.
- 2) IRQ0-IRQ7 relocated by DesQview.
- 3) IRQ0-IRQ7 relocated by IBM 3278 Emulation Control Program.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 58h Reserved by IBM (not initialized) ............ 5**48│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 59h Reserved by IBM (not initialized) ............ 5**49│
- └─────────────────────────────────────────────────────────────────────┘
- GSS Computer Graphics Interface (GSS*CGI)
- entry DS:DX pointer to block of 5 array pointers
- return CF clear
- AX return code
- CF set
- AX error code
- note 1) Int 59h is the means by which GSS*CGI language bindings
- communicate with GSS*CGI device drivers and the GSS*CGI device
- driver controller.
- 2) Also used by the IBM Graphic Development Toolkit.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 5Ah Reserved by IBM (not initialized) ........... 5**50│
- └─────────────────────────────────────────────────────────────────────┘
- note IBM Cluster Adapter BIOS entry address.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 5Bh Reserved by IBM (not initialized) ............ 5**51│
- └─────────────────────────────────────────────────────────────────────┘
- note Used by IBM Cluster Adapter.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 5Ah Cluster Adapter BIOS entry address ............ 5**52│
- └─────────────────────────────────────────────────────────────────────┘
- note Normally not initialized.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 5Bh Reserved by IBM (not initialized) ............ 5**53│
- └─────────────────────────────────────────────────────────────────────┘
- note Used by cluster adapter?
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 5Ch NETBIOS interface entry port, TOPS ............ 5**54│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) See Chapter 13 for information on network programming.
- 2) The Texas Instruments Professional PC (TI Pro) uses 5Ch for
- the Pause key on the keyboard. The TI BIOS allows any user
- routine to execute from the Pause interrupt as long as it
- eventually returns.
- 3) Used by Windows/386 by Virtual Machine routines.
- 4) Used by Novell Netware 2.0.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 5Dh Reserved by IBM (not initialized) ............ 5**55│
- └─────────────────────────────────────────────────────────────────────┘
- note The Texas Instruments Professional PC (TI Pro) uses 5Ch for the
- keyboard services.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 5Eh Reserved by IBM (not initialized) ............ 5**56│
- └─────────────────────────────────────────────────────────────────────┘
- note TI Professional PC - Program Break.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 5Fh Reserved by IBM (not initialized) ............ 5**57│
- └─────────────────────────────────────────────────────────────────────┘
- note TI Professional PC - Keyboard queueing.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 60h-67h User Program Interrupts .................... 5**58│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Available for general use.
- 2) Some Adaptec hard disk controllers used these interrupts.
- Models and usages unknown.
- 3) Various major programs make standardized use of this group of
- interrupts. Details of common use follows:
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 60h User Program Interrupt ........................ 5**59│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Used by 10-Net Network OS Interface.
- 2) Used by FTP Driver - PC/TCP Packet Driver Specification.
- 3) See Chapter 13 for network programming calls.
- 4) Used by TOPS netork (TTALK.EXE).
- 5) The 2-The-Max VGA-16 board TSR zoom utility uses this
- interrupt by default. (see int 61h for details)
- 6) Versa-Spool print spooler revectors int 17h to here when
- installing its own 17h handler. (see int 61h also)
- 7) Some older OMTI and Adaptec hard disk controllers used the
- interrupts from 60h to 63h as 16 bytes of scratch RAM.
- 8) Used by GDOSMEM Windows TSR skeleton.
- entry AX GTSR Identification #
- BX 00h GTSR Installation Check
- return BX GTSR Identification #
-
- entry AX GTSR Identification #
- BX 01h GTSR Increment WORD in CX:DX
- CX Segment => WORD
- DX Offset => WORD
- return none
- 9) Used by TDOSMEM Windows TSR skeleton.
- entry AX TTSR Identification #
- BX 00h GTSR Installation Check
- return BX GTSR Identification #
- CX Segment => local WORD
- DX Offset => local WORD
-
- entry AX TTSR Identification #
- BX 01h GTSR Increment WORD in CX:DX
- return none
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 61h User Interrupt ................................. 5** │
- └─────────────────────────────────────────────────────────────────────┘
- 1) Default interrupt used by Chris Dunford's PCED 2.0 API.
- 2) Used by Mike Geary's DENYNONE.ASM SHARE.EXE controller.
-
- Function 00h Get Current Mode Value
- entry AH 00h
- return AL current mode value
-
- Function 01h Set New Open-Mode Value
- entry AH 01h
- AL new value to set
- return none
-
- 3) The 2-The-Max VGA-16 board TSR zoom utility uses this interrupt
- by default.
-
- Function 00h Zoom
- entry AX 0000h
- BX zoom factor (0-7x)
- return none
-
- Function 01h Center Zoomed Window
- entry AX 0001h
- BX x coordinate to center
- CX y coordinate to center
- return none
- note 'x' and 'y' will be positioned as close to the center of
- the display as possible.
-
- Function 02h End Zoom
- entry AX 0002h
- return none
- note Restores screen to original state.
-
- Function 03h Report Zoom
- entry AX 0003h
- return AX zoom factor (0-7)
-
- Function 04h Enter Specify Mode
- entry AX 0004h
- return none
- note This mode is entered whenever the predefined hotkey is
- pressed.
-
- Function 05h Query Zoom Window
- entry AX 0005h
- BX segment address of return argument array
- CX offset address of return argument array
- return BX:CX 14 byte array
- offset[0] x start of zoom window
- [1] y start of zoom window
- [2] x end of zoom window
- [3] y end of zoom window
- [4] current zoom factor
- [5] zoom offset start x
- [6] zoom offset start y
-
- Function 06h Set Zoom Window
- entry AX 0006h
- BX segment address of window coordinate array
- CX offset address of window coordinate array
- return BX:CX array
- offset[0] x start of zoom window
- [1] y start of zoom window
- [2] x end of zoom window
- [3] y end of zoom window
- 4) Versa-Spool print spooler revectors int 1Ch to here when
- installing its own 1Ch handler.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 63h User Program Interrupt │
- └─────────────────────────────────────────────────────────────────────┘
- This interrupt is used by Novell NetWare v2.0.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 64h User Program Interrupt │
- └─────────────────────────────────────────────────────────────────────┘
- This interrupt is used by Novell NetWare IPX versions 1.02-2.0 TBMI.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 65h User Program Interrupt │
- └─────────────────────────────────────────────────────────────────────┘
- This interrupt is used by Novell NetWare v2.0.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 67h User Program Interrupt ........................ 5**60│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Used by Lotus-Intel-Microsoft Expanded Memory Specification
- 3.1 and higher. (EMS and LIM)
- 2) Used by Ashton-Tate/Quadram/AST Enhanced Expanded Memory
- Specification 3.1 and higher. (EEMS)
- 3) Used by Phar Lap/Quarterdeck VCPI v1.0.
- 4) See Chapter 10 for EMS/EEMS programming information.
- 5) The Advanced Digital PC Slave board (also marketed by Alloy)
- contains its own 8mHz 8086, up to 768K of on-card memory and a
- built-in monochrome monitor adapter, communicating with an
- RS232 terminal at 19.2KBaud. Their operating system is an
- adaptation of MSDOS 2.11 called RTNX or ATNX. ?TNX uses
- interrupt 67h for record locking, using an "interrupt 67h
- semaphore" system in which a data record access must be
- preceded by a call to int 67h with a string that contains a
- filename and a record number to lock.
- 6) Some Adaptec hard disk controllers have problems related to
- their use of int 67h. Supposedly the Adaptec can be made to
- use a driver instead of ROM. The driver is generated by
- running the ROM program at C800:5 and this fixes the problem.
- Apparently this driver is called ADAPTEC.DRV. Check with
- Adaptec if you suspect a problem.
- 7) IBM issued a known bug report listing a fault in DOS 4.0's
- network handling within IBMBIO.COM. The exact wording of the
- report is:
- IR79404 WAIT IBMBIO INT 2FH for INT 67H causes hang
- 8) Used by PC-Net semaphore calls.
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 68h Not Used (not initialized) ................... 5**61│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) APPC/PC Network Interface. See Chapter 13.
- 2) Some Toshiba laptop hard disk controllers use this interrupt.
- 3) Used by HDTest to communicate with BIOS entry point.
- 4) Used by Mike Geary's EGA720.ASM (forces EGA into 720x348 mode)
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 69h Not Used (not initialized) ................... 5**62│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 6Ah Not Used (not initialized) ................... 5**63│
- └─────────────────────────────────────────────────────────────────────┘
- note Used by SLR System's OPTHELP.COM, a TSR help system for their
- OPTASM assembler. OPTHELP may be configured to interrupts
- from 60h to 7Fh.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 6Bh Not Used (not initialized) ................... 5**64│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 6Ch System Resume Vector (Convertible) ............ 5**65│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) This vector is not initialized on the PC, XT, or PCJr.
- 2) DOS 3.2 Realtime Clock update uses this interrupt.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 6Dh Not Used (not initialized) ................... 5**66│
- └─────────────────────────────────────────────────────────────────────┘
- note Used internally by VGA adapter - IBM, Paradise, Video 7, NCR
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 6Eh Not Used (not initialized) ................... 5**67│
- └─────────────────────────────────────────────────────────────────────┘
-
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 6Fh 10-Net API..................................... 5**68│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) See Chapter 13 for information on the 10-Net API.
- 2) HP ES-12 Extended BIOS
- a) Read CMOS Memory
- entry AH 22h
- BL address of CMOS byte to read
- BP 0012h
- return AH status
- AL byte read
- BP, DS destroyed
- b) Write CMOS Memory
- entry AH 24h
- AL new value
- BL address of CMOS byte to write
- BP 0012h
- return AH status
- BP, DS destroyed
- 3) Novell NetWare - PCOX API (3270 PC terminal interface).
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 70h IRQ 8, Real Time Clock Int (AT, XT/286, PS/2) . 5**69│
- └─────────────────────────────────────────────────────────────────────┘
-
- This interrupt services the real-time clock hardware. The
- hardware supports 2 modes of operation, an interrupt at a
- specific 24 hour interval (i.e 9:42 am), or repeatedly every
- 0.976 ms (1,024 kHz). Both modes can operate at the same time
- if needed.
-
- In the 24 hour alarm mode, the interrupt is vectored here by
- hardware and interrupt 4Ah is called to alert the application
- program of the alarm. Int 4Ah is not handled by the BIOS
- other than to return, and is normally revectored by a
- particular application using the alarm.
-
- When repeating interrupt mode is active, the 32-bit
- microsecond counter consisting of timer_clk_low and
- timer_clk_hi is decremented by 976 us on every interrupt.
- When the timer reaches zero, the byte pointed to by the offset
- @timer_wait_off and and segment @timer_wait_seg is set to 80h
- (this pointer is set by an application program through int 1Ah
- function ah=6).
-
- The Motorola MC146818A real time clock chip, or its
- equivalent, can be programmed to generate the real time clock
- interrupt (int 70h) approximately 1024 times per second. The
- BIOS Real Time Clock ISR is invoked on each real time clock
- interrupt. Only AT BIOSs support the Real Time Clock ISR.
-
- The BIOS initializes the int 70h vector to address F000:5124h.
-
- Three AT BIOS functions interface with the int 70h Real Time
- Clock ISR. These are:
- int 15h, AH 83h Event Wait Interval
- int 15h, AH 86h Wait
- int 1Ah, AH 06h Set User Alarm
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 71h IRQ 9, Redirected to IRQ 8 (AT, XT/286, PS/2) . 5**70│
- └─────────────────────────────────────────────────────────────────────┘
- note LAN Adapter 1 (rerouted to int 0Ah [IRQ2] by BIOS).
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 72h IRQ 10 (AT, XT/286, PS/2) Reserved .......... 5**71│
- └─────────────────────────────────────────────────────────────────────┘
- note Hardware servicer (called by hardware 8259-2, IRQ 10).
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 73h IRQ 11 (AT, XT/286, PS/2) Reserved .......... 5**72│
- └─────────────────────────────────────────────────────────────────────┘
- note Hardware servicer (called by hardware 8259-2, IRQ 11).
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 74h IRQ 12 Mouse Interrupt (PS/2) ................ 5**73│
- └─────────────────────────────────────────────────────────────────────┘
- note Hardware servicer (called by hardware 8259-2, IRQ 12).
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 75h IRQ 13, Coprocessor Error (AT) ................ 5**74│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) BIOS redirects math coprocessor errors to int 2 (NMI).
- 2) The math co-processor 80287 invokes this interrupt. Int 75h
- calls the non-maskable interrupt int 2 to halt the system.
- (80287 is not used if this vector is left pointing here).
- Programs which use the 80287 must re-vector this interrupt to
- use the 80287.
- 3) Under DOS 3.2, this interrupt is routed through the DOS
- interrupt stack pool like device interrupts. However,
- coprocessor exceptions generally do not resume via IRET and
- this fill the interrupt pool (stacks allocated and never
- deallocated) on exceptions. Microsoft has a patch available
- for DOS 3.2.
- 4) Weitek ABACUS x167 math coprocessor exception handler shares
- this interrupt with Intel 80x87 if present.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 76h IRQ 14, Hard Disk Controller (AT, XT/286, PS/2) 5**75│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Called by hardware 8259-2 IRQ 14.
- 2) When the hard disk controller has completed its task, it
- signals completion though hardware activation of int 76h. The
- status in hdsk_int_flags is set to "done", a value of 0FFh.
- Int 15/fn91h may also be called to signal the interrupt is
- done.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 77h IRQ 15 (AT, XT/286, PS/2) Reserved ........... 5**76│
- └─────────────────────────────────────────────────────────────────────┘
- note Future services (called by hardware 8259-2 IRQ 15).
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 78h Not Used ...................................... 5**77│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Used by Novell Netware 2.0 - non-dedicated shell.
- 2) DESQview uses ints 78h-7Fh for itself to revector the 8259
- interrupt controllers.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 79h Not Used ...................................... 5**78│
- └─────────────────────────────────────────────────────────────────────┘
-
- note 1) Used by LAN:Datacore runtimes for BASIC and C by Lanquest
- Group in releases after late '86.
- 2) Used by AutoCAD 2.5/2.6 ADI Digitizer interface (default).
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 7Ah Reserved ...................................... 5**79│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Novell NetWare - Low-Level API APX, versions 2.0a+. See
- Chapter 13.
- 2) AutoCAD Device Interface, used by various video boards.
- 3) IBM 3270 Emulator program.
- 4) Also used by early versions of "File Access Utility" by
- Automated Insurance Resource Systems. AIRS changed to a
- different interrupt in late '86 to eliminate conflict with
- Novell.
- 5) Used by LAN:Datacore runtimes for BASIC and C by Lanquest
- Group in versions 2.5 and higher before late '86. Lanquest
- changed to int 79h to prevent Novell conflict.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 7Bh-7Eh Not Used by IBM ............................ 5**80│
- └─────────────────────────────────────────────────────────────────────┘
- Btrieve API
- entry register unknown
- functions:
- 00h open
- 01h close
- 02h insert
- 03h update
- 04h delete
- 05h get_equal
- 06h get_next
- 07h get_prev
- 08h get_greater
- 09h get_gr_eql
- 0Ah get_less
- 0Bh get_less_eq
- 0Ch get_first
- 0Dh get_last
- 0Eh create
- 0Fh stat
- 10h extend
- 11h set_dir: set directory information
- 12h get_dir: get directory information
- 13h begin_trans
- 14h end_trans
- 15h abort_trans
- 16h get_pos: get record position number
- 17h get_direct: get data by sending record position
- 18h step_direct
- 19h stop
- 1Ah version
- 1Bh unlock
- 1Ch reset
- return unknown
- note Btrieve sets low byte of vector to 33h; this serves as the
- installation check.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 7Bh Novell ........................................ 5** │
- └─────────────────────────────────────────────────────────────────────┘
- note 1) BTRIEVE from Softcraft, Inc.
- 2) IPX on Proteon networks with ANW 2.0 or greater.
- 3) Air File by Automated Insurance Resource Systems.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 7Ch REXX-PC API ................................... 5**81│
- └─────────────────────────────────────────────────────────────────────┘
- IBM REXX-PC macro language
- entry AX 0000h Initialize
- DS:SI pointer to null terminated name of program to be
- executed
- EB:BX pointer to null terminated argument string to be passed
- to the program
- DX:DI pointer to an environment control block in the format:
- dword offset in segment to signature string The
- segment is that contained in DX and the
- signature is the uppercase ASCIIZ string
- "REXX".
- dword offset in DX to environment name ASCIIZ string
- note: The environment name will be truncated if
- longer than 32 characters.
- dword offset in DX to the file extension ASCIIZ
- string
- dword path search - word value of 0 or non-zero. This
- controls the searching of the path for commands
- that might be REXX programs. 0 means no search
- made, non-zero means search first.
- dword x'AAAA'
- This is a signature that allows REXXPC88 to
- call your own defined routine when a command
- expression needs to be processed.
- DD Segment:offset (standard INTEL format) of
- environment work buffer, the first double word
- of the buffer MUST be the entry point address
- of the environment service routine to be
- called. The rest of the buffer may be used in
- any way you choose and will NOT be examined or
- modified by REXXPC88.
- return none
- note 1) The only way to tell if the program exists and can be executed
- is by examining a value returned by the program in the next
- call described below. If the program returns an end of
- program indication and a string was expected instead, it means
- that the program was not found or could not be executed for
- some reason.
- 2) All registers except SS and SP are destroyed. The caller must
- save any other registers of interest.
-
-
- Function 01h Interpret REXX Command
- This call tells REXXPC88 to interpret the REXXPC88 program
- until a value is produced.
- entry AX 0001h
- return DS:DX points to a result string, terminated by a CR + LF +
- NULL. The final result string (which marks the end of
- the program) consists of nothing but EOF + NULL.
- REXXPC88 will continue to return this "end of program"
- string until reinitialized via an AX=01h call as
- described above.
- note All registers except SS and SP are destroyed. The caller must
- save any other registers of interest.
-
-
- Function 02h Termination
- This call allows resident REXXPC88 extensions to terminate
- execution of a REXXPC88 program, typically after detecting an
- error.
- entry AX 0002h
- DS:SI points to null terminated string to be displayed as an
- error message before terminating the REXXPC88 program.
- return none
- note Terminates the REXXPC88 program and returns control to DOS.
-
-
- Function 03h Load
- This call tells REXXPC88 to look up a program variable and
- return its current value (if any).
- entry AX 0003h
- DS:SI points to null terminated name of REXXPC88 program
- variable.
- DS:DX points to the null terminated string value of the
- program variable. DX is zero if the program variable is
- currently undefined. This string is in REXXPC88's data
- area and must be treated as read-only.
- return none
- note 1) All registers except SS and SP are destroyed. The caller must
- save any other registers of interest.
-
-
- Function 04h Store
- This call tells REXXPC88 to store a null terminated string as
- the value of a program variable.
- entry AX 0004h
- DS:SI points to null terminated name of REXXPC88 program
- variable
- ES:BX points to null terminated string to be assigned to the
- variable
- return none
- note 1) The string is copied into REXXPC88's data dictionary. If
- there is insufficient storage to store the string, REXXPC88
- terminates execution of the program with an error message and
- returns to DOS.
- 2) Registers: all registers except SS and SP are destroyed. The
- caller must save any other registers of interest.
-
-
- Function 05h User-Written Extensions
- entry AX 0005h
- SS:BP points to a C stack frame containing a two-byte pointer
- to the null terminated function name, a two-byte integer
- specifying the number of arguments, and a two-byte
- pointer to an array of pointers (each two bytes) to the
- arguments (each argument is a null terminated string).
- return DS:SI must point to a null terminated result string. A pointer
- of NIL (DS = 0, SI = 0) is reserved by REXXPC88 and
- indicates that "no REXXPC88 extensions answered the
- function".
- note 1) Registers: all registers except SS, SP, and BP are available
- for use.
- 2) Stack: Since the amount of REXXPC88 stack space remaining for
- growth can't be ascertained by the user extension program, the
- user may wish to switch to a local stack if he requires more
- than about 128 bytes of stack growth.
-
-
- Function 06h Queue
- This call tells REXXPC88 to place data on the data or external
- interrupt queue either FIFO or LIFO.
- entry AX 06h
- BH 00h Internal data queue accessible via PULL and
- PARSE PULL
- 01h External interrupt queue accessible via
- LINEIN(EXQUE)
- BL 00h Queue data FIFO on selected queue
- 01h Queue data LIFO on selected queue
- DS:SI points to null terminated string to be queued.
- return AX 0000h Message queued successfully.
- 0001h No REXXPC88 program running at current time.
- Message not queued.
- 0002h Not enough storage available for message.
- Message not queued.
- 0003h Either BH (queue number) or BL (FIFO/LIFO flag)
- out of range. Message not queued.
- note 1) For the Internal data queue a string may not exceed 127
- characters.
- 2) For the External int. queue a string may not exceed available
- storage.
- 3) Registers: all registers except SS and SP are destroyed. The
- caller must save any other registers of interest.
-
-
- Function 07h Check for Loaded Extension
- This call provides a way for a REXXPC88 extension to find out
- if a copy is already loaded, and to exchange information with
- a resident version.
- entry AX 0007h
- SS:BP points to a C stack frame containing a two-byte pointer
- to the null terminated name of the REXXPC88 extension.
- return If the extension is already loaded, then DS:SI points to an
- ASCIIZ string '1', and other registers are used as desired by
- the extension to communicate with its non-resident copy.
- (Generally, this involves pointing ES:BX to the resident
- portion's entry point). If the extension is not yet resident,
- then DS:SI points to an ASCIIZ '0'.
- note Registers: all registers except SS, SP and BP are available
- for use.
-
-
- Function 08h Reserved
- This call is reserved for communication between REXXSYS.SYS
- and REXXIBMR.
- entry AX 0008h
- return none
-
-
- Function 09h Check for REXX Installed
- This call provides external applications a way to determine if
- REXXIBMR is installed.
- entry AX 09h
- return AX 0FFFFh REXXIBMR is not installed
- AX 0AAAAh REXXIBMR is installed
- note It is assumed that your application will inspect the value of
- the 7Ch interrupt vector prior to issuing this interrupt. If
- the vector is 0000:0000 then REXXIBMR is not installed and
- this function will cause the system to crash.
-
-
- Function 0Ah Uninstall resident version of REXX
- This call is used to uninstall a resident version
- entry AX 000Ah
- BX 0AAAAh
- return AX 0000h Resident version uninstalled
- 0001h Resident version cannot uninstall, as one
- interrupt vector has been modified by some
- other program in a non-conforming manner.
- 0FFFFh The installed resident version does NOT support
- the uninstall request code (i.e., it is pre
- 0.55 level).
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 7Fh IBM 8514/A Graphics Adapter API ............... 5**82│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) 59 8514/A API functions available (HDILOAD.EXE) parameters
- unknown.
- 2) Used by second copy of COMMAND set with SHELL=.
- 3) Not used by COMMAND /C at DOS prompt.
- 4) The IBM RTIC (Real Time Interface Coprocessor) Multiport (and
- Multiport/2) use int 7Fh as a method of communication between
- the system-unit resident interrupt handler and the RTIC card's
- operating system. There is a convention for using it in which
- register AX contains the signature of the handler that should
- handle the interrupt. Some signatures are:
- AX 0200h is a call to the current task dispatcher
- (from the BTRIEVE application
- interface).
- AX 0101h is a call from an application to the
- RTIC function request mechanism.
- AX 0FEEDh is a call from the ICAINTH.SYS interrupt
- handler.
- 5) MultiLink Advanced (a custom version of PC-MOS/386), versions
- 3.03 and higher, from The Software Link, Inc.
- Function 02h Invoke user interface (multitasking DOS shell)
- entry AH 02h
- AL 00h
- return unknown
- Function 0Dh Set new spooler parameters
- entry AH 0Dh
- AL ASCII code for disposition (D,S,H,N)
- BH ASCII code for priority (0-9)
- BL ASCII code for class (A-Z)
- return AL Error
- 00h OK
- 01h no spooler installed
- 02h invalid request
- Function 0Eh Get spooler parameters
- entry AH 0Eh
- return AL 01h if no spooler installed, otherwise:
- AL ASCII code for disposition (D,S,H,N)
- BH ASCII code for priority (0-9)
- BL ASCII code for class (A-Z)
- 6) There have been mentions of assorted other little-known
- programs using this interrupt. In view of its use by DOS and
- the increasingly-popular 8514/A adapter, it would probably be
- wise to avoid int 7Fh for aftermarket application software.
- 7) Also used by IBM HLLAPI.
- 8) Used internally by later versions of Tom Mack's RBBS-PC BBS
- system.
- 9) Used by Novell Netware 2.0+ to switch non-dedicated shell to
- console mode.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 80h-85h Reserved by BASIC .......................... 5**83│
- └─────────────────────────────────────────────────────────────────────┘
- note Interrupts 80h through 0ECh are apparently unused and not
- initialized in most clone systems. Not known if GWBASIC or
- MBASIC use any of these interrupts.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 80h Novell Netware 2.0 ............................ 5** │
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 81h Novell Netware 2.0 ............................ 5** │
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 82h Reserved by BASIC ............................. 5** │
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Used in some early versions of NEC Multispeed laptop for ROM
- application management.
- 2) Used by Pecan Software's Pascal compiler (P-system).
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 81h Used by Proteon Network ....................... 5** │
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 86h Int 18 when relocated by NETBIOS .............. 5**84│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 86h-0F0h Used by BASIC when interpreter is running . 5**85│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0A0h-0D0h TI Professional - free interrupt pool .... 5** │
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0A4h Right Hand Man API ............................ 5**86│
- └─────────────────────────────────────────────────────────────────────┘
- entry AH RHM function (unknown)
- return unknown
- note Right-Hand Man is a shareware TSR desktop utility similar
- to SideKick.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0D4h PC-MOS/386 API ................................ 5**87│
- └─────────────────────────────────────────────────────────────────────┘
- note This interrupt is used for access to the PC-MOS/386 4.x
- operating system's user API. Previous versions of the OS
- used interrupt 38h. See Chapter 13 for MOS API programming
- information.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0E0h Digital Research CP/M-86 function calls ....... 5**88│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Lotus 123 Release 2 reportedly alters the int 0E0h vector
- during operation and leaves it pointing somewhere in the TPA
- on exit. Perhaps used by the mysterious Lotus add-on program
- hook?
- 2) Used by Digital Research CP/M-86, Concurrent CP/M and
- Concurrent DOS API entry points. Values are typically passed
- in the DX register and returned in the AX register.
- 3) Used by Larry Himes' PD TBACK background timeslicer for DOS.
- (very old)
- 4) Used by American Data Technology SmartFAX products.
- entry AH 20h Send FAX
- AL 02h for FAX format file
- 03h for ASCII format file
- CH number of redials (0-9). Defaults to 9 if input out of
- range.
- CL backoff time (1-99). 1 unit is 15 sec, value is set to
- 99 if out of range
- DS:DX input filename (ASCII). 20 bytes max.
- DX:BX dial number. Speed dial number is allowed
- return AL (if bit 7 set) number of files transmitted
- (bit 7 not set) 0FFh file not found
- 0FEh no dial tone
- 0FDh line busy or non-FAX tone
- 0FCh other error
- entry AH 21h reserved
-
- entry AH 22h Auto/Manual Transmission Toggle
- AL 00h switch to Auto mode (default)
- 01h switch to Manual mode
- return none
-
- entry AH 23h Set Manual Receive Mode
- AL 00h switch to Auto mode (default)
- 01h switch to Manual mode. SmartFAX will not
- answer phone
- return none
-
- entry AH 24h Send FAX Handshake to Remote
- note No other parameters are necessary. No returns.
-
- entry AH 25h Enable/Disable Background Task for Spooling
- AL 00h enabled background operation. Program will put
- the received data in the 80188 to spool.
- 01h disables background operation. Does not spool
- data. Data can be recovered by fns 26h and 27h.
- return none
-
- entry AH 26h Check 80188 Buffer
- AX data length
- BL 00h some data of the same page appears in the next
- buffer
- 01h end of page, more to follow
- 02h end of page, last page
-
- entry AH 27h Get Data from 80188 Buffer
- DS:DX pointer to buffer to be saved, minimum size 12Kb.
- return AX data length
- BL 00h some data of the same page appears in the next
- buffer
- 01h end of page, more to follow
- 02h end of page, last page
-
- entry AH 28h Reset After Receive
- note Resets SmartFAX for next call. No other parameters.
-
- entry AH 29h Enable/Disable Communication Function
- AL 00h enable communication
- 01h disable communication
- note In disable mode, SmartFAX will not send or receive.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0E1h PC Cluster Program ............................ 5**89│
- └─────────────────────────────────────────────────────────────────────┘
- note This is a pointer to the disk server data table.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0E2h PC Cluster Program ............................ 5**90│
- └─────────────────────────────────────────────────────────────────────┘
- note Interrupt 1Ch is revectored to here.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0E4h Logitech Modula-2 v2.0 Monitor Entry ........ 5**91│
- └─────────────────────────────────────────────────────────────────────┘
- entry AX 05h monitor entry
- 06h monitor exit
- BX priority
- return unknown
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0E5h Not Used ...................................... 5**92│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0E6h Not Used ...................................... 5**93│
- └─────────────────────────────────────────────────────────────────────┘
- note Used by PKzip file compressor.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0E7h Not Used ...................................... 5**94│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0E8h Not Used ...................................... 5**95│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0E9h Not Used ...................................... 5**96│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0EAh Not Used ...................................... 5**97│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0EBh Not Used ...................................... 5**98│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0ECh Not Used ...................................... 5**99│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0EDh Not Used ..................................... 5**100│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0EEh Not Used ..................................... 5**101│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0EFh GEM interface (Digital Research) ............. 5**102│
- └─────────────────────────────────────────────────────────────────────┘
- entry CX 0473h
- DS:DX pointer to GEM parameter block
- note no other parameters are known
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0F0h unknown ...................................... 5**103│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) Used by secondary copy of COMMAND when SHELL= set.
- 2) Not used by COMMAND /C at DOS prompt.
- 3) Used by BASIC while in interpreter.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupts 0F1h-0FFh (absolute addresses 3C4h-3FFh) ......... 5**104│
- └─────────────────────────────────────────────────────────────────────┘
- note Location of Interprocess Communications Area.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0F4h Not Used ............ ........................ 5**105│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0F5h Not Used ............ ........................ 5**106│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0F8h Set Shell Interrupt (OEM) .................... 5**107│
- └─────────────────────────────────────────────────────────────────────┘
- Set OEM handler for int 21h calls from 0F9h through 0FFh
- entry AH 0F8h
- DS:DX pointer to handler for Functions 0F9h thru 0FFh
- note 1) To reset these calls, pass DS and DX with 0FFFFh. DOS is set
- up to allow ONE handler for all 7 of these calls. Any call to
- these handlers will result in the carry bit being set and AX
- will contain 1 if they are not initialized. The handling
- routine is passed all registers just as the user set them.
- The OEM handler routine should be exited through an IRET.
- 2) 10 ms interval timer (Tandy?)
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0F9h Reserved ..................................... 5**108│
- └─────────────────────────────────────────────────────────────────────┘
- note First of 8 SHELL service codes, reserved for OEM shell
- (WINDOW); use like HP Vectra user interface?
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0FAh USART ready (RS-232C) ........................ 5**109│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0FBh USART RS ready (keyboard) .................... 5**110│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0FCh Unknown .......................................5**111│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0FDh reserved for user interrupt .................. 5**112│
- └─────────────────────────────────────────────────────────────────────┘
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0FEh reserved by IBM .............................. 5**113│
- └─────────────────────────────────────────────────────────────────────┘
- note AT/XT286/PS50+ - vector destroyed by return from protected
- mode.
-
-
- ┌─────────────────────────────────────────────────────────────────────┐
- │Interrupt 0FFh reserved by IBM .............................. 5**114│
- └─────────────────────────────────────────────────────────────────────┘
- note 1) AT/XT286/PS50+ - vector destroyed by return from protected
- mode.
- 2) Zenith Z-100 (S-100 bus MSDOS) warm boot.
-
-
-